二叉树及先序,中序,后序遍历
生活随笔
收集整理的這篇文章主要介紹了
二叉树及先序,中序,后序遍历
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、什么是二叉樹
每個結點至多只有兩棵子樹,并且,二叉樹有左右之分不能隨便顛倒位置。
二、二叉樹的存儲形式
1、順序存儲結構
用一組地址連續的存儲單元以此自上而下、自左從右的存儲二叉樹的結點元素。這種結構便于遍歷二叉樹查找元素,但是會浪費大量內存空間。
2、鏈式存儲結構
每個結點有指向左右子樹的指針,本身的數據內容,還可以加上指向雙親的指針。這樣相對于順序存儲結構能夠節省內存空間。
三、二叉樹結構體
typedef struct Node{
int data;
Node *lchild;
Node *rchild;
}Node;
四、先序遍歷
1、先訪問根節點
2、先序遍歷左子樹
3、先序遍歷右子樹
代碼(遞歸):
void BL(tree* T){
printf("%d",T->data);
if(T->lchild!=NULL)
BL(T->lchild);
if(T->rchild!=NULL)
BL(T->rchild);
}
五、中序遍歷
1、中序遍歷左子樹
2、訪問根節點
3、中序遍歷右子樹
代碼(遞歸):
void BL(tree* T)
{
if(T->lchild!=NULL)
BL(T->lchild);
printf("%d",T->data);
if(T->rchild!=NULL)
BL(T->rchild);
}
六、后序遍歷
1、后序遍歷左子樹
2、后序遍歷右子樹
3、訪問根節點
代碼(遞歸):
void BL(tree* T)
{
if(T->lchild!=NULL)
BL(T->lchild);
if(T->rchild!=NULL)
BL(T->rchild);
printf("%d",T->data);
}
七、例子
上圖的先序:-+a*b-cd/ef
中序:a+b*c-d-e/f
后序:abcd-*+ef/-
對于三種遍歷,可以這樣去想,就比較容易理解了,從根開始一直往左子樹遍歷,到底后,然后退回一個點,遍歷右子樹的所有左子樹,如此循環,如果是先序,就在第一次訪問節點的時候進行處理,如果是中序就是第二次訪問節點的時候處理,如果是后序就第三次訪問的時候進行處理。只要記住結點的三次訪問分別是干什么的,就可以很好的理解三次遍歷過程,只有熟練掌握了三種遍歷,才能用算法去實現樹的各種操作。
總結
以上是生活随笔為你收集整理的二叉树及先序,中序,后序遍历的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下路由配置梳理
- 下一篇: 数三角形