рдХрдИ рдиреЗ рд╢рд╛рдпрдж рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреЗрдбрд╝ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЦреЛрдЬ рдЗрдВрдЬрди рдореЗрдВ рдХреЗрд╡рд▓ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╡рд╛рд▓реЗ рдкрд╛рдП рдЧрдП ... рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЦреЛрдЬ рдкреЗрдбрд╝, рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреЗрдбрд╝ рдХрд╛ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдФрд░ рдХрдИ рдЕрдиреНрдп рдПрд▓реНрдЧреЛрд░рд┐рджрдоред
рд╣рд╛рдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рдкреЗрдбрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд╛рдИрдкрд╛рд╕ рдзреАрдорд╛ рд╣реИ, рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдЫреЛрдЯреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдпрд╣ рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ рдФрд░ рдЕрдм рдореИрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдкреЗрдбрд╝ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рддреЛ, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдХреЗ рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рддреАрди рдЪрд░ рд╕рдВрдЧреНрд░рд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
- рдмрдбрд╝реЗ рдмреЗрдЯреЗ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛
- рднрд╛рдИ рдХреЛ рдЗрд╢рд╛рд░рд╛
- рдбреЗрдЯрд╛ рдЬрд┐рд╕реЗ рдЖрдк рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ
struct Tnode { int key; struct Tnode *son; struct Tnode *brother; }; typedef struct Tnode Node;
рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╢реАрд░реНрд╖ рдкрд░ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
Node *tree = NULL;
рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╣рдордд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреИрд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ рд╣реИ, рдпрд╣ рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╡реГрдХреНрд╖ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдкрд░ рдХреЛрдИ рднреА рдкреБрддреНрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
- + 2 (рдпрд╛ + ssbb 2) - рдкреЗрдбрд╝ рдореЗрдВ рд╕рдореНрдорд┐рд▓рди (рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреЗрдбрд╝ рдХреЗ рд▓рд┐рдП, рд░рд╛рд╕реНрддрд╛ рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрд░ рдЬрдбрд╝ рд╣реИ, рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдмреЗрдЯреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рд╣реИ, рдмреА рднрд╛рдИ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рд╣реИ);
рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛:
+r 1 + 2 + 3 + 3 +s 5 +sb 6 +sb 7
рдирддреАрдЬрддрди, рдпрд╣ рдкреЗрдбрд╝ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
1 2 5 3 6 7 3
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдЬреЛ рдПрдХ рд╡рд░реНрдЯреЗрдХреНрд╕ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ (рд╢реБрд░реВ рдореЗрдВ рдХреБрдЫ рднреА рдЕрд╕рдВрдмрдВрдзрд┐рдд)ред
Node *create_tree(int v) { Node *Tree = (Node *) malloc(sizeof(Node)); Tree->key = v;
рдЖрдкрдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рднреА рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдкрде рд╕реНрдЯреНрд░рд┐рдВрдЧ (+ bs ...) рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рд░реВрдЯ рд╕реЗ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдпрд╣ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо NULL рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ (рд╣рдо рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЕрдЧрд░ рдХреЛрдИ рдЪреЛрдЯреА рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЯреНрд░реА рдЯреНрд░реА рдлрдВрдХреНрд╢рди рдореЗрдВ рдЬрд╛рдПрдВ рдФрд░ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд░реВрдЯ рдкрд░ рд▓рд╛рдПрдВред
рдиреЛрдЯ: рдиреЛрдб ** рд╡реГрдХреНрд╖ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд╣реАрдВред рдпрд╣ рд╣рдореЗрдВ рдиреЛрдб * рдЯреНрд░реА рдШреЛрд╖рдгрд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЙрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдореЗрдВ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╢реАрд░реНрд╖ рдкрд░ рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рдмреЗрдЯрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
Node* add_node(Node **tree, const char *a) { Node* t = *tree; int value; scanf("%d", &value); int i = 0; while (a[++i] != '\0') { if (a[i] == 'r') { *tree = create_tree(value);
рдЗрд╕ рддрд░рд╣ рд╣рдо рдПрдХ рдкреЗрдбрд╝ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред
PS рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдХрдбрд╝рд╛рдИ рд╕реЗ рдиреНрдпрд╛рдп рди рдХрд░реЗрдВ