【大話資料結構C語言】30 二叉樹中序遍歷演算法
阿新 • • 發佈:2020-12-22
我的首發平臺是公眾號【CodeAllen】,學習交流QQ群:736386324
中序遍歷的程式碼
/* 二叉樹的中序遍歷遞迴演算法 */
/* 初始條件: 二叉樹T存在 */
/* 操作結果: 中序遞迴遍歷T */
void InOrderTraverse(BiTree T)
{
if(T==NULL)
return;
InOrderTraverse(T->lchild); /* 中序遍歷左子樹 */
printf("%c",T->data); /* 顯示結點資料,可以更改為其它對結點操作 */
InOrderTraverse(T->rchild); /* 最後中序遍歷右子樹 */
}
看程式碼可以知道,對比先序遍歷,等於是把呼叫左孩子的遞迴函式提前了
二叉樹中序遍歷的實現思想是:
- 訪問當前節點的左子樹;
- 訪問根節點;
- 訪問當前節點的右子樹;
以上圖為例,採用中序遍歷的思想遍歷該二叉樹的過程為:
- 訪問該二叉樹的根節點,找到 1;
- 遍歷節點 1 的左子樹,找到節點 2;
- 遍歷節點 2 的左子樹,找到節點 4;
- 由於節點 4 無左孩子,因此找到節點 4,並遍歷節點 4 的右子樹;
- 由於節點 4 無右子樹,因此節點 2 的左子樹遍歷完成,訪問節點 2;
- 遍歷節點 2 的右子樹,找到節點 5;
- 由於節點 5 無左子樹,因此訪問節點 5 ,又因為節點 5 沒有右子樹,因此節點 1 的左子樹遍歷完成,訪問節點 1 ,並遍歷節點 1 的右子樹,找到節點 3;
- 遍歷節點 3 的左子樹,找到節點 6;
- 由於節點 6 無左子樹,因此訪問節點 6,又因為該節點無右子樹,因此節點 3 的左子樹遍歷完成,開始訪問節點 3 ,並遍歷節點 3 的右子樹,找到節點 7;
- 由於節點 7 無左子樹,因此訪問節點 7,又因為該節點無右子樹,因此節點 1 的右子樹遍歷完成,即整棵樹遍歷完成;
圖中二叉樹採用中序遍歷得到的序列為:4 2 5 1 6 3 7