遍歷二叉樹的三種方法:
前序:根節點->左子樹->右子樹
中序:左子樹->根節點->右子樹
後序:左子樹->右子樹->根節點
非遞迴演算法中序遍歷二叉樹,設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...