2014-03-31 43 views
4

有人能幫助我的算法遍歷一個二叉樹反覆,而無需使用任何其他數據結構就像一個堆棧對樹的遍歷迭代方法

我讀的地方,我們可以有一個名爲參觀了每一個節點的標誌如果訪問節點但我的BinaryTreeNode類沒有定義訪問變量,則開啓。所以我不可能做一些像node.left.visited = false

是否有任何其他方式來遍歷迭代?

回答

7

一個選項是thread二叉樹。當某個節點指向NULL(無論是左還是右)時,使該節點指向其遍歷中的下一個節點(預定單,後期定單等)。通過這種方式,您可以在一次迭代中遍歷整個樹。

樣品線索二叉樹:

enter image description here

注意左側的每個節點分節點小於它的最大價值。每個節點的右邊節點指向的最大值比它大。所以這給出了一個有序的遍歷。

+0

謝謝。我將如何去執行相同的操作?不會那也需要額外的變量爲繼任者和前輩?我的BTNode只有三個變量,數據,左節點和右節點。 – Htlcs

+0

@JimZilla [Here](http://www.geeksforgeeks.org/inorder-tree-traversal-without-recursion-and-without-stack/)是線程二叉樹的C實現。它不會在你的樹結構中需要任何額外的變量,也不會爲後繼者和前輩添加額外的變量。 –

+0

優秀!謝謝 – Htlcs