General view wa mtengo, kukhazikitsa ndi zina

Anthu ambiri mwina anayesa kupeza mtengo wamba, koma makina osakira adapeza ma binary okha ... Mtengo wosakira wa Binary, traversal mitengo ya binary ndi njira zina zambiri.
Inde, mtengo wamba sugwiritsidwa ntchito paliponse, kuyenda pang'onopang'ono, njira zogwiritsira ntchito ndizochepa.

Kotero, ndinadzifunsa ndekha funso ili ndipo tsopano ndikufotokozera momwe mtengowo umapangidwira. Chifukwa chake, momwe mtengo wamba uyenera kusungira mitundu itatu:

  • cholozera kwa mwana wamkulu
  • cholozera kwa m'bale
  • deta yomwe musunga

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

Tiyeni tilengeze cholozera ku vertex:

Node *tree = NULL;

Tiyenera kuvomereza pasadakhale momwe tingalowetsere ma vertices; uwu si mtengo wa binary, ndipo vertex iliyonse imatha kukhala ndi ana ambiri momwe ingafunire.

  • + 2 (kapena + ssbb 2) - kulowetsa mumtengo (kwa mtengo wamba, njira imaperekedwa ndi mzere, kumene r ndi kulengedwa kwa muzu, s ndi kusintha kwa mwana wamkulu, b ndi kusintha kwa m'bale);

Ndiroleni ndikupatseni chitsanzo:

+r 1
+ 2
+ 3
+ 3
+s 5
+sb 6
+sb 7

Zotsatira zake zikhala mtengo ngati uwu:

1
  2
    5
  3
    6
    7
  3

Choyamba, tiyeni tipange ntchito yomwe imawonjezera vertex, yomwe imagawa kukumbukira kwa vertex ndikudutsa cholozera ku vertex iyi (poyamba sichinagwirizane ndi chirichonse).

Node *create_tree(int v) {
  Node *Tree = (Node *) malloc(sizeof(Node));
  Tree->key = v;
  //обнуляСм ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΊ Π±Ρ€Π°Ρ‚ΡŒΡΠΌ ΠΈ ΡΡ‹Π½ΠΎΠ²ΡŒΡΠΌ, нСзависимая Π²Π΅Ρ€ΡˆΠΈΠ½Π°, которая Ρ…Ρ€Π°Π½ΠΈΡ‚ value
  Tree->son = NULL;
  Tree->brother = NULL;
  return Tree;
}

Muyeneranso kupanga ntchito yomwe imagwira chingwe cha njira (+ bs ...). Nthawi iliyonse tikayamba kuyenda kuchokera muzu, ngati sichinapangidwe, ndiye kuti timatulutsa NULL (sitingathe kuchita chilichonse). Ngati palibe vertex, ndiye kuti tiyenera kupanga. Timapita ku ntchito yolenga mtengo ndikupeza cholozera ku muzu.

Zindikirani kuti Node ** mtengo ukudutsa kapangidwe kake, osakopera. Izi zimatipatsa kuthekera kosintha zinthu zomwe sitingathe kuchita ndi Node *declaration yamitengo.

Mwambiri, tiyenera kupeza cholozera ku vertex komwe tiyenera kuwonjezera mwana:

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;
    }
}

Umu ndi momwe timamangira mtengo.

P.S. nkhani yanga yoyamba, kotero chonde musaweruze mwankhanza

Source: www.habr.com

Kuwonjezera ndemanga