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