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