Pono e akaretsang ea sefate, ts'ebetsong le tse ling

Batho ba bangata ba ka 'na ba leka ho fumana mohaho o tloaelehileng oa sefate, empa mochine oa ho batla o fumane feela binary ... Binary search tree, binary tree traversal le mekhoa e mengata e mengata.
E, ka sebele, sefate se akaretsang ha se sebelisoe kae kapa kae, ho tsamaea hoa lieha, linyeoe tsa tšebeliso li nyenyane.

Kahoo, ke ile ka ipotsa potso ena 'me joale ke tla hlalosa hore na sefate se hahiloe joang. Kahoo, hantle, sebopeho sa sefate se akaretsang se lokela ho boloka mefuta e meraro:

  • sesupo ho mora e moholo
  • sesupa ho abuti
  • data eo u tla e boloka

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

Ha re phatlalatseng sesupo ho vertex:

Node *tree = NULL;

Re tlameha ho lumellana esale pele mokhoa oa ho kenya li-vertices; sena ha se sefate sa binary, 'me sekoti se seng le se seng se ka ba le bana ba bangata kamoo ba batlang.

  • + 2 (kapa +ssbb 2) - ho kenngoa sefateng (bakeng sa sefate se akaretsang, tsela e fanoa ke mola, moo r e leng pōpo ea motso, s ke phetoho ho mora e moholo, b ke phetoho ho moena);

E-re ke u fe mohlala:

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

Sephetho e tla ba sefate se kang sena:

1
  2
    5
  3
    6
    7
  3

Taba ea pele, ha re theheng tšebetso e eketsang vertex, e leng, e abelang memori bakeng sa vertex le ho fetisa pointer ho vertex ena (qalong e sa hokahane le eng kapa eng).

Node *create_tree(int v) {
  Node *Tree = (Node *) malloc(sizeof(Node));
  Tree->key = v;
  //обнуляем указатели к братьям и сыновьям, независимая вершина, которая хранит value
  Tree->son = NULL;
  Tree->brother = NULL;
  return Tree;
}

U boetse u hloka ho theha ts'ebetso e sebetsanang le khoele ea tsela (+bs ...). Nako le nako ha re qala ho tšela ho tloha motso, haeba e sa bōptjoa, joale re hlahisa NULL (re ke ke ra etsa letho). Haeba ha ho na vertex, joale re tlameha ho e theha. Re ea mosebetsing oa ho bopa sefate mme re fumana pointer ho motso.

Hlokomela hore sefate sa Node ** se fetisa sebopeho, eseng ho se kopitsa. Sena se re fa bokhoni ba ho fetola lintho tseo re ke keng ra li etsa ka phatlalatso ea Node * sefate.

Ka kakaretso, re tlameha ho fumana pointer ho vertex eo re hlokang ho eketsa mora ho eona:

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

Ka tsela ena re haha ​​sefate.

P.S. sehlooho sa ka sa pele, kahoo ka kōpo u se ke ua ahlola ka thata haholo

Source: www.habr.com

Eketsa ka tlhaloso