General maonero emuti, kushandiswa uye nezvimwe

Vanhu vazhinji vangave vakaedza kutsvaga kuvakwa kwemuti mukuru, asi injini yekutsvaga yakawana chete mabhinari ... Binary search tree, binary tree traversal uye mamwe akawanda algorithms.
Hongu, zvirokwazvo, muti wakawanda hausi kushandiswa chero kupi zvako, kutenderera kunononoka, mashandisiro ekushandisa maduku.

Saka, ndakazvibvunza mubvunzo uyu uye zvino ndichatsanangura kuti muti unovakwa sei. Saka, zvine musoro, chimiro chemuti chakajairwa chinofanira kuchengetedza matatu akasiyana:

  • chinongedzera kumwanakomana mukuru
  • pointer kuna mukoma
  • data rauri kuzochengeta

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

Ngatizivise chinongedzo kune vertex:

Node *tree = NULL;

Isu tinofanirwa kubvumirana pachine nguva kuti tingapinda sei mavertices; uyu hausi muti webhinari, uye vertex yega yega inogona kuita vana vakawanda sezvavanoda.

  • + 2 (kana +ssbb 2) - kuiswa mumuti (kumuti mukuru, nzira inopiwa nemutsara, apo r ndiko kusikwa kwemudzi, s ishanduko kuenda kumwanakomana mukuru, b ishanduko kune mukoma);

Rega ndikupe muenzaniso:

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

Mhedzisiro ichava muti wakadai:

1
  2
    5
  3
    6
    7
  3

Chekutanga, ngatigadzirei basa rinowedzera vertex, kureva, inogovera ndangariro kune vertex uye inopfuudza chinongedzo kune iyi vertex (pakutanga isina kubatana kune chero chinhu).

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

Iwe zvakare unofanirwa kugadzira basa rinobata nzira tambo (+ bs ...). Nguva imwe neimwe yatinotanga kutenderera kubva pamudzi, kana isina kusikwa, saka tinoburitsa NULL (hatigone kuita chero chinhu). Kana pasina vertex, saka tinofanira kuigadzira. Tinoenda kune basa rekugadzira muti uye tinowana pointer kumudzi.

Ziva kuti Node ** muti uri kupfuura chimiro, kwete kuikopa. Izvi zvinotipa kugona kushandura zvinhu zvatisingakwanise kuita neNode *declaration yemuti.

Kazhinji, tinofanira kuwana chinongedzo kune vertex yatinofanira kuwedzera mwanakomana:

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

Aya ndiwo magadzirirwo atinoita muti.

PS ichi ndicho chinyorwa changu chekutanga, saka ndokumbirawo usatonga nehasha

Source: www.habr.com

Voeg