遍歷二叉樹 遞迴和非遞迴演算法

2021-05-23 09:40:36 字數 1051 閱讀 5940

遍歷二叉樹的三種方法:

前序:根節點->左子樹->右子樹

中序:左子樹->根節點->右子樹

後序:左子樹->右子樹->根節點

非遞迴演算法中序遍歷二叉樹,設s為乙個棧,p為指向根節點的指標,處理過程如下:

1)當p非空時,壓棧p指標,並將p指向該節點的左子樹。

2)當p為空時,彈出棧頂元素,顯示節點元素,並將p指向該節點的右子樹。

3)重複步驟1)和2),直到棧空且p空。

c語言**如下:

// 二叉樹節點

typedef struct bitree

bitree;

// 新節點

bitree *new(char data)

// 中序遍歷二叉樹的遞迴演算法

voidinorder(bitree *t)

}// 前序遍歷二叉樹的遞迴演算法

voidpreorder(bitree *t)

}// 後序遍歷二叉樹的遞迴演算法

voidpostorder(bitree *t)

}// 前序遍歷二叉樹的非遞迴演算法

voidpreorder2(bitree *t)

if (top != -1)

}}// 中序遍歷二叉樹的非遞迴演算法

voidinorder2(bitree *t)

if (top != -1)

}}// 後序遍歷二叉樹的非遞迴演算法

voidpostorder2(bitree *t)

// 當棧非空,並且棧頂元素tag為1時,出棧並訪問

while (top!=-1 && tag[top]==1)

// 當棧非空時,將棧頂tag置1,並指向棧頂元素的右孩子

if (top != -1)

}}int main()

遍歷二叉樹 遞迴和非遞迴演算法

遍歷二叉樹的三種方法 前序 根節點 左子樹 右子樹 中序 左子樹 根節點 右子樹 後序 左子樹 右子樹 根節點 非遞迴演算法中序遍歷二叉樹,設s為乙個棧,p為指向根節點的指標,處理過程如下 1 當p非空時,壓棧p指標,並將p指向該節點的左子樹。2 當p為空時,彈出棧頂元素,顯示節點元素,並將p指向該...

二叉樹遞迴遍歷和非遞迴遍歷

用遞迴和非遞迴實現二叉樹的前序遍歷 中序遍歷和後序遍歷並列印出相應結果。private class treenode 在遞迴呼叫時候系統自動給我們建立棧來儲存資料,而使用非遞迴時候需要我們自己實現棧來儲存資料。遞迴實現前序遍歷public void preorder treenode root sy...

二叉樹遍歷(遞迴和非遞迴)

二叉樹的中序遍歷 二叉樹的後序遍歷 測試二叉樹的節點定義如下 節點 二叉樹的前序遍歷順序為 根左右。如下圖所示,前序遍歷順序為 1245367。遞迴 public static void preorder treenode root system.out.print root.val preorde...