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

2021-06-25 17:24:16 字數 900 閱讀 3776

遍歷二叉樹的三種方法:

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

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

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

非遞迴演算法中序遍歷二叉樹,設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...