二叉樹的遞迴遍歷和非遞迴 迴圈 遍歷實現

2021-06-29 11:22:38 字數 687 閱讀 1867

struct bintree

;

void

preorder(bintree * root)

}

訪問節點 p 並將節點 p 入棧

判斷節點 p 的左孩子是否為空,若不為空,則輸出左孩子,並將 p 指向新的左孩子,直至左孩子為空

若左孩子為空,這時候左孩子的父節點都已經輸出完畢,此時父節點在棧中,因此將 p 指向出棧的節點的右孩子,遍歷右分支

直至指標為空並棧為空,遍歷結束

中序遍歷只需要調整輸出語句即可

void preorder(bintree * root)

if(!s.empty())

}}

要保證根結點在左孩子和右孩子訪問之後才能訪問,因此對於任一結點p,先將其入棧。如果p不存在左孩子和右孩子,則可以直接訪問它;或者p存在左孩子或者右孩子,但是其左孩子和右孩子都已被訪問過了,則同樣可以直接訪問該結點。若非上述兩種情況,則將p的右孩子和左孩子依次入棧,這樣就保證了每次取棧頂元素的時候,左孩子在右孩子前面被訪問,左孩子和右孩子都在根結點前面被訪問

void postorder(bintree *root)     //非遞迴後序遍歷

else

}

}

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

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

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

二 叉樹是一種非常重要的資料結構,很多其它資料結構都是基於二叉樹的基礎演變而來的。對於二叉樹,有前序 中序以及後序三種遍歷方法。因為樹的定義本身就是 遞迴定義,因此採用遞迴的方法去實現樹的三種遍歷不僅容易理解而且 很簡潔。而對於樹的遍歷若採用非遞迴的方法,就要採用棧去模擬實現。在三種遍歷中,前序和中...

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

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