ืžื‘ื˜ ื›ืœืœื™ ืขืœ ื”ืขืฅ, ื™ื™ืฉื•ื ื•ืขื•ื“

ืื ืฉื™ื ืจื‘ื™ื ื›ื ืจืื” ื ื™ืกื• ืœืžืฆื•ื ืžื‘ื ื” ืขืฆื™ื ื›ืœืœื™, ืื‘ืœ ืžื ื•ืข ื”ื—ื™ืคื•ืฉ ืžืฆื ืจืง ื‘ื™ื ืืจื™ื™ื... ืขืฅ ื—ื™ืคื•ืฉ ื‘ื™ื ืืจื™, ืžืขื‘ืจ ืขืฆื™ื ื‘ื™ื ืืจื™ ื•ืขื•ื“ ืืœื’ื•ืจื™ืชืžื™ื ืจื‘ื™ื ืื—ืจื™ื.
ื›ืŸ, ืื›ืŸ, ื”ืขืฅ ื”ื›ืœืœื™ ืื™ื ื• ื‘ืฉื™ืžื•ืฉ ื‘ืฉื•ื ืžืงื•ื, ื”ืžืขื‘ืจ ืื™ื˜ื™, ืžืงืจื™ ื”ืฉื™ืžื•ืฉ ืงื˜ื ื™ื.

ืื–, ืฉืืœืชื™ ืืช ืขืฆืžื™ ืืช ื”ืฉืืœื” ื”ื–ื• ื•ืขื›ืฉื™ื• ืืกื‘ื™ืจ ืื™ืš ื”ืขืฅ ื‘ื ื•ื™. ืœื›ืŸ, ื‘ืื•ืคืŸ ืื™ื“ื™ืืœื™, ืžื‘ื ื” ืขืฅ ื›ืœืœื™ ืฆืจื™ืš ืœืื—ืกืŸ ืฉืœื•ืฉื” ืžืฉืชื ื™ื:

  • ืžืฆื‘ื™ืข ืœื‘ืŸ ื”ื‘ื›ื•ืจ
  • ืžืฆื‘ื™ืข ืœืื—
  • ื”ื ืชื•ื ื™ื ืฉืืชื” ื”ื•ืœืš ืœืื—ืกืŸ

struct Tnode {
    int key;
    struct Tnode *son;
    struct Tnode *brother;
};
typedef struct Tnode Node;

ื‘ื•ืื• ื ื›ืจื™ื– ืขืœ ืžืฆื‘ื™ืข ืœืงื•ื“ืงื•ื“:

Node *tree = NULL;

ืขืœื™ื ื• ืœื”ืกื›ื™ื ืžืจืืฉ ื›ื™ืฆื“ ืœื”ื–ื™ืŸ ืงื•ื“ืงื•ื“ื™ื; ื–ื” ืœื ืขืฅ ื‘ื™ื ืืจื™, ื•ืœื›ืœ ืงื•ื“ืงื•ื“ ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ื›ืžื” ื™ืœื“ื™ื ืฉืชืจืฆื”.

  • + 2 (ืื• +ssbb 2) - ื”ื›ื ืกื” ืœืขืฅ (ืขื‘ื•ืจ ืขืฅ ื›ืœืœื™, ื”ื ืชื™ื‘ ื ื™ืชืŸ ืขืœ ื™ื“ื™ ื”ืงื•, ื›ืืฉืจ r ื”ื•ื ื™ืฆื™ืจืช ืฉื•ืจืฉ, s ื”ื•ื ืžืขื‘ืจ ืœื‘ืŸ ื”ื‘ื›ื•ืจ, b ื”ื•ื ืžืขื‘ืจ ืืœ ืื—);

ืื ื™ ืืชืŸ ื“ื•ื’ืžื”:

+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;
  //ะพะฑะฝัƒะปัะตะผ ัƒะบะฐะทะฐั‚ะตะปะธ ะบ ะฑั€ะฐั‚ัŒัะผ ะธ ัั‹ะฝะพะฒัŒัะผ, ะฝะตะทะฐะฒะธัะธะผะฐั ะฒะตั€ัˆะธะฝะฐ, ะบะพั‚ะพั€ะฐั ั…ั€ะฐะฝะธั‚ value
  Tree->son = NULL;
  Tree->brother = NULL;
  return Tree;
}

ืืชื” ืฆืจื™ืš ื’ื ืœื™ืฆื•ืจ ืคื•ื ืงืฆื™ื” ืฉืžื˜ืคืœืช ื‘ืžื—ืจื•ื–ืช ื”ื ืชื™ื‘ (+bs...). ื‘ื›ืœ ืคืขื ืฉืื ื—ื ื• ืžืชื—ื™ืœื™ื ืืช ื”ืžืขื‘ืจ ืžื”ืฉื•ืจืฉ, ืื ื”ื•ื ืœื ื ื•ืฆืจ, ืื– ื ื•ืฆื™ื NULL (ืื ื—ื ื• ืœื ื™ื›ื•ืœื™ื ืœืขืฉื•ืช ื›ืœื•ื). ืื ืื™ืŸ ืงื•ื“ืงื•ื“, ืื– ืขืœื™ื ื• ืœื™ืฆื•ืจ ืื•ืชื•. ืื ื—ื ื• ื”ื•ืœื›ื™ื ืœืคื•ื ืงืฆื™ื™ืช create tree ื•ืžืงื‘ืœื™ื ืžืฆื‘ื™ืข ืœืฉื•ืจืฉ.

ืฉื™ื ืœื‘ ืฉืขืฅ Node** ืขื•ื‘ืจ ืืช ื”ืžื‘ื ื”, ืœื ืžืขืชื™ืง ืื•ืชื•. ื–ื” ื ื•ืชืŸ ืœื ื• ืืช ื”ื™ื›ื•ืœืช ืœืฉื ื•ืช ื“ื‘ืจื™ื ืฉืื ื—ื ื• ืœื ื™ื›ื•ืœื™ื ืœืขืฉื•ืช ืขื ื”ืฆื”ืจืช ื”-Node *ืขืฅ.

ื‘ืื•ืคืŸ ื›ืœืœื™, ืขืœื™ื ื• ืœืžืฆื•ื ืžืฆื‘ื™ืข ืœืงื•ื“ืงื•ื“ ืฉืืœื™ื• ืื ื• ืฆืจื™ื›ื™ื ืœื”ื•ืกื™ืฃ ืืช ื”ื‘ืŸ:

Node* add_node(Node **tree, const char *a) {
  Node* t = *tree;
  int value;
  scanf("%d", &value);
  int i = 0;
      while (a[++i] != ' ') {
        if (a[i] == 'r') {
            *tree = create_tree(value); // ัะพะทะดะฐะตะผ ะบะพั€ะตะฝัŒ
            t = *tree;
            return *tree;
          }
        if (a[i] == 's') {
          if (t = to_son(t)) // ั„ัƒะฝะบั†ะธั, ะบะพั‚ะพั€ะฐั ะฒะพะทะฒั€ะฐั‰ะฐะตั‚ ัƒะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ัั‹ะฝะฐ
            continue;
          return NULL; //ะธะฝะฐั‡ะต NULL
        }
        if (a[i] == 'b') {
          if (t = to_brother(t)) //ะฒะพะทะฒั€ะฐั‰ะฐะตั‚ ัƒะบะฐะทะฐั‚ะตะปัŒ ะฝะฐ ะฑั€ะฐั‚ะฐ t 
            continue;
          return NULL;
        }
    }
    if (t->son != NULL) {
    t = last_son(t); // ะผั‹ ะฟะตั€ะตัˆะปะธ ะบ ะฒะตั€ัˆะธะฝะต, ะบ ะบะพั‚ะพั€ะพะน ั…ะพั‚ะตะปะธ 
   //ะธ ั‚ะตะฟะตั€ัŒ ะธะดะตะผ ะบ ะฟะพัะปะตะดะฝะตะผัƒ ะตะต ัั‹ะฝัƒ,
   //ั‡ั‚ะพะฑั‹ ะดะพะฑะฐะฒะธั‚ัŒ ะฒ ะบะพะฝะตั† ัะฟะธัะบะฐ
    t->brother = create_tree(value);
    return t->brother;
    }
    else {//ะตัะปะธ ัั‹ะฝะฐ ะฝะตั‚, ั‚ะพ ัะพะทะดะฐะดะธะผ ะตะณะพ
      t->son = create_tree(value);
      return t->son;
    }
}

ื›ืš ื‘ื•ื ื™ื ืขืฅ.

ื .ื‘. ื–ื” ื”ืžืืžืจ ื”ืจืืฉื•ืŸ ืฉืœื™, ืื– ื‘ื‘ืงืฉื” ืืœ ืชืฉืคื•ื˜ ื‘ื—ื•ืžืจื”

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”