二叉樹各類操作

2021-08-10 14:22:08 字數 2593 閱讀 8677

1.二叉樹鏈式儲存:

1. typedef char datatype;  

2.

3. typedef struct binnodebinnode;

8.

9. typedef binnode* bintree; //bintree本身是個指向結點的指標

2. 前序遍歷:根節點->左子樹

->

右子樹

1. void preorder_dev(bintree t)else  

13. t=pop(&s);

14. t=t->rchild;

15. }

16. }

17. }

3. 中序遍歷:左子樹->根節點

->

右子樹

1. void midorder(bintree t)else  

12. t=pop(&s);

13. printf("%c ",t->data);

14. t=t->rchild;

15. }

16. }

17. }

4. 後序遍歷:左子樹->右子樹

->

根節點

1. void postorder_dev(bintree t)else  

13. if(s.tag[s.top] == 0)else

22. t = null; //必須將t置空。跳過向左走,直接向右走

23. }

24. }

25. }

26. }

5.  層次遍歷:即每一層從左向右輸出

元素需要儲存有先進先出的特性,所以選用佇列儲存。

佇列的定義:

1. #define max 1000  

2.

3. typedef struct seqqueueseqqueue;

8.

9.

10. void enter(seqqueue *q,bintree t)else

17. }

18.

19. bintree del(seqqueue *q)else

26. }

遍歷實現

1. void level_tree(bintree t)  

9. enter(&q,t);

10. while(q.front != q.rear)

16. if(t->rchild)

19. }

20. }

6. 利用前序遍歷的結果生成二叉樹

1. //遞迴呼叫,不存點,想的時候只關注於乙個點,因為還會回來的,不要跟蹤程式執行,否則容易多加迴圈  

2.

3. void createtree(bintree *t)

13. }

7. 二叉樹的查詢

1. bintree search_tree(bintree t,datatype x)  

5. if(t->data == x)else

11. return t;

12. }

13. }

8. 統計結點個數

1. int count_tree(bintree t)  

5. return 0;

6. }

9.比較兩個樹是否相同

1. int is_equal(bintree t1,bintree t2)  

5. if(t1 && t2 && t1->data == t2->data)

10. }

11. return 0;

12. }

10.求二叉樹的深度

1. int hight_tree(bintree t)  

6. left = hight_tree(t->lchild);

7. right = hight_tree(t->rchild);

8. h = (left>right?left:right)+1;

9. return h;

10. }

二叉樹的各類操作

include include include includetypedef char elemtype 樹結構 typedef struct tree treenode,tree 建立一棵樹,號結束 先序遍歷建立 void createtree tree t else 遞迴先序遍歷 void pr...

二叉樹的各類操作

include include 定義結構 typedef struct node bitnode,bitree 建立二叉樹 void createbitree bitree bt else 先序遍歷二叉樹 void preorder bitree root 中序遍歷二叉樹 void inorder ...

二叉樹的各類遍歷

include include include include define maxn 1111 using namespace std struct bintree bintree build bintree t void preorder bintree t 前序遍歷遞迴 void inorde...