Используя стек обойти бинарное/двоичное дерево поиска в глубину на Си
Текст программы
Код на C++ #include <stdio.h> #include <conio.h> #include <string.h> #include <alloc.h> #define pop() stx[--deep] #define push(x) stx[deep++] = x struct NODE { int info ; struct NODE *left, *right; }; NODE *s1 = 0, *s2 = 0 ; int deep = 0; NODE *stx[1000]; NODE* insert(NODE *root, int x) { if (root==0) { root = (NODE *) malloc (sizeof(NODE)); root->info = x ; root->left = root->right = 0 ; } else if (x <= root->info) root->left = insert(root->left, x); else root->right = insert(root->right, x); return root ; } void display( NODE *p ) { push(p); while (deep) { p = pop(); printf(" %-7d ", p->info); if (p->right) push(p->right); if (p->left) push(p->left); } } //Используя стек обойти бинарное/двоичное дерево поиска в глубину NODE* find(NODE* t, int x) { if(t) { if(x == t->info) return t; else if (x < t->info) return find(t->left,x); else return find(t->right,x); } else return 0; } NODE* remove(NODE* root, int x) { NODE* b; if (root==0) return 0; if (x==root->info) { if (root->left==0) { b=root->right; delete root; return b; } b = root->left; while (b->right) b=b->right; b->right=root->right; return root->left; } if (x<=root->info) root->left = remove(root->left,x); else root->right = remove(root->right,x); return root; } void main() { clrscr() ; s1 = insert ( s1, 2) ; s1 = insert ( s1, 1) ; s1 = insert ( s1, 3) ; puts("\n s1 = "); display (s1) ; s2 = insert ( s1, 1) ; s2 = insert ( s1, 9) ; puts("\n s2 = "); display (s1) ; getch() ; }
|