Gbogbogbo wiwo ti awọn igi, imuse ati siwaju sii

Ọpọlọpọ awọn eniyan jasi gbiyanju lati wa kan gbogboogbo igi ikole, ṣugbọn awọn search engine ri nikan alakomeji... Igi search alakomeji, alakomeji igi traversal ati ọpọlọpọ awọn miiran algoridimu.
Bẹẹni, nitootọ, igi gbogboogbo ko lo nibikibi, ọna gbigbe lọra, awọn ọran lilo jẹ kekere.

Nitorina, Mo beere ara mi ni ibeere yii ati bayi Emi yoo ṣe alaye bi a ṣe kọ igi naa. Nitorinaa, ni pipe, eto igi gbogbogbo yẹ ki o tọju awọn oniyipada mẹta:

  • itọka si akọbi ọmọ
  • ijuboluwole si arakunrin
  • awọn data ti o ti wa ni lilọ lati fipamọ

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

Jẹ ki a sọ itọka kan si fatesi:

Node *tree = NULL;

A gbọdọ gba tẹlẹ bi a ṣe le wọ awọn inaro; eyi kii ṣe igi alakomeji, ati petẹsi kọọkan le ni ọpọlọpọ awọn ọmọde bi o ṣe fẹ.

  • + 2 (tabi +ssbb 2) - ifibọ sinu igi kan (fun igi gbogbogbo, ọna ti a fun nipasẹ laini, nibiti r jẹ ẹda ti gbongbo, s jẹ iyipada si ọmọ akọbi, b jẹ iyipada si arakunrin);

Jẹ ki n fun ọ ni apẹẹrẹ:

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

Abajade yoo jẹ igi bi eleyi:

1
  2
    5
  3
    6
    7
  3

Ni akọkọ, jẹ ki a ṣẹda iṣẹ kan ti o ṣafikun fatesi kan, eyun, sọ iranti iranti fun fatesi ati ki o kọja itọka si fatesi yii (ni ibẹrẹ ko sopọ si ohunkohun).

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

O tun nilo lati ṣẹda iṣẹ kan ti o mu okun ọna (+bs...). Nigbakugba ti a ba bẹrẹ irin-ajo lati gbongbo, ti ko ba ṣẹda, lẹhinna a gbejade NULL (a ko le ṣe ohunkohun). Ti ko ba si fatesi, lẹhinna a gbọdọ ṣẹda rẹ. A lọ si iṣẹ igi ṣẹda ati gba itọka si gbongbo.

Ṣe akiyesi pe Node *** igi n kọja eto naa, kii ṣe didakọ rẹ. Eyi fun wa ni agbara lati yi awọn nkan pada ti a ko le ṣe pẹlu ikede Node * igi.

Ni gbogbogbo, a gbọdọ wa itọka si fatesi eyiti a nilo lati ṣafikun ọmọ naa:

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

Eyi ni bi a ṣe kọ igi kan.

P.S. Nkan akọkọ mi, nitorinaa jọwọ maṣe ṣe idajọ lile ju

orisun: www.habr.com

Fi ọrọìwòye kun