遍歷二叉樹的三種方法:
前序:根節點->左子樹->右子樹
中序:左子樹->根節點->右子樹
後序:左子樹->右子樹->根節點
非遞迴演算法中序遍歷二叉樹,設s為乙個棧,p為指向根節點的指標,處理過程如下:
1)當p非空時,壓棧p指標,並將p指向該節點的左子樹。
2)當p為空時,彈出棧頂元素,顯示節點元素,並將p指向該節點的右子樹。
3)重複步驟1)和2),直到棧空且p空。
c語言**如下:
// 二叉樹節點
typedef struct bitree
bitree;
// 新節點
bitree *new(char data)
// 中序遍歷二叉樹的遞迴演算法
void inorder(bitree *t)
}// 前序遍歷二叉樹的遞迴演算法
void preorder(bitree *t)
}// 後序遍歷二叉樹的遞迴演算法
void postorder(bitree *t)
}// 前序遍歷二叉樹的非遞迴演算法
void preorder2(bitree *t)
if (top != -1)}}
// 中序遍歷二叉樹的非遞迴演算法
void inorder2(bitree *t)
if (top != -1)}}
// 後序遍歷二叉樹的非遞迴演算法
void postorder2(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指向該...
遍歷二叉樹 遞迴和非遞迴演算法
遍歷二叉樹的三種方法 前序 根節點 左子樹 右子樹 中序 左子樹 根節點 右子樹 後序 左子樹 右子樹 根節點 非遞迴演算法中序遍歷二叉樹,設s為乙個棧,p為指向根節點的指標,處理過程如下 1 當p非空時,壓棧p指標,並將p指向該節點的左子樹。2 當p為空時,彈出棧頂元素,顯示節點元素,並將p指向該...
二叉樹遞迴遍歷和非遞迴遍歷
用遞迴和非遞迴實現二叉樹的前序遍歷 中序遍歷和後序遍歷並列印出相應結果。private class treenode 在遞迴呼叫時候系統自動給我們建立棧來儲存資料,而使用非遞迴時候需要我們自己實現棧來儲存資料。遞迴實現前序遍歷public void preorder treenode root sy...