1. 程式人生 > 其它 >【大話資料結構C語言】30 二叉樹中序遍歷演算法

【大話資料結構C語言】30 二叉樹中序遍歷演算法

技術標籤:資料結構與演算法二叉樹資料結構演算法

我的首發平臺是公眾號【CodeAllen】,學習交流QQ群:736386324

中序遍歷的程式碼

/* 二叉樹的中序遍歷遞迴演算法 */
/* 初始條件: 二叉樹T存在 */
/* 操作結果: 中序遞迴遍歷T */
void InOrderTraverse(BiTree T)
{ 
    if(T==NULL)
        return;
    InOrderTraverse(T->lchild); /* 中序遍歷左子樹 */
    printf("%c",T->data);       /* 顯示結點資料,可以更改為其它對結點操作 */
InOrderTraverse(T->rchild); /* 最後中序遍歷右子樹 */ }

看程式碼可以知道,對比先序遍歷,等於是把呼叫左孩子的遞迴函式提前了

二叉樹中序遍歷的實現思想是:

  1. 訪問當前節點的左子樹;
  2. 訪問根節點;
  3. 訪問當前節點的右子樹;

在這裡插入圖片描述
以上圖為例,採用中序遍歷的思想遍歷該二叉樹的過程為:

  1. 訪問該二叉樹的根節點,找到 1;
  2. 遍歷節點 1 的左子樹,找到節點 2;
  3. 遍歷節點 2 的左子樹,找到節點 4;
  4. 由於節點 4 無左孩子,因此找到節點 4,並遍歷節點 4 的右子樹;
  5. 由於節點 4 無右子樹,因此節點 2 的左子樹遍歷完成,訪問節點 2;
  6. 遍歷節點 2 的右子樹,找到節點 5;
  7. 由於節點 5 無左子樹,因此訪問節點 5 ,又因為節點 5 沒有右子樹,因此節點 1 的左子樹遍歷完成,訪問節點 1 ,並遍歷節點 1 的右子樹,找到節點 3;
  8. 遍歷節點 3 的左子樹,找到節點 6;
  9. 由於節點 6 無左子樹,因此訪問節點 6,又因為該節點無右子樹,因此節點 3 的左子樹遍歷完成,開始訪問節點 3 ,並遍歷節點 3 的右子樹,找到節點 7;
  10. 由於節點 7 無左子樹,因此訪問節點 7,又因為該節點無右子樹,因此節點 1 的右子樹遍歷完成,即整棵樹遍歷完成;

圖中二叉樹採用中序遍歷得到的序列為:4 2 5 1 6 3 7