public
void
infixthrnodes
(treenode node)
infixthrnodes
(node.lchild);if
(node.lchild == null)
if(pre != null && pre.rchild == null)
pre = node;
infixthrnodes
(node.rchild)
;}
(0表示孩子節點,1表示前驅或後驅節點)(我們需要提前定義乙個變數用於儲存之前遍歷過的前驅節點。因為node節點每次都會向下走。一旦走過之後就無法獲取到前驅節點了,所有我們需要乙個變數儲存前驅節點)
(因為我們只定義了兩個節點,只有前驅和根節點,而沒有後驅節點。所以必須等到本應該是根節點的node走到後驅節點位置上。這時pre節點就會走到根節點位置,這樣我們就有根節點後驅節點)。
public
void
infixshow
(treenode node)
system.out.
println
(point)
;while
(point != node && point.rtype ==1)
point = point.rchild;
}}
二叉樹線索化
二叉樹的線索化可以使得二叉樹的非遞迴遍歷不需借助棧或佇列這種資料結構,最主要的是可以為之提供迭代器。線索化二叉樹有三種方式 前序線索化 中序線索化 後序線索化 後序線索化需要三叉鏈結構 這裡主要講前序線索化和中序線索化,並為中序線索化提供迭代器。線索化的思想就是將一顆二叉樹遍歷轉換成有序雙向鍊錶進行...
二叉樹線索化
名稱 二叉樹線索化 說明 這個東西,一開始弄起來,我去,感覺老複雜了。照著書上看了好久,愣是沒看懂,照著敲了一遍,又手動模擬推了一遍,有了一點思路。照著把後序的線索化和遍歷也敲出來了。這裡要注意的是 對於中序來說,其能線索化後訪問到其前驅和後繼 可以理解為不通過棧訪問到 而對於後序來說,其只能不通過...
二叉樹線索化
線索二叉樹 按照某種遍歷方式對二叉樹進行遍歷,可以把二叉樹中所有結點排序為乙個線性序列。在改序列中,除第乙個結點外每個結點有且僅有乙個直接前驅結點 除最後乙個結點外每乙個結點有且僅有乙個 直接後繼結點。這些指向直接前驅結點和指向直接後續結點的指標被稱為線索 thread 加了線索的二叉樹稱為線索二叉...