常用的資料結構之線索二叉樹的構建

2021-09-18 05:06:35 字數 1136 閱讀 8286

1: 

當使用非遞迴遍歷二叉樹時仍要開乙個使用者棧,而構建了線索二叉樹後就不需要再開棧了,可以節省不少空間。

因為線索二叉樹是用鍊錶儲存的,可以非常快的找到前驅或後繼節點。

首先,中序建立線索二叉樹的**如下。

struct tbtnode;

void inthread(tbtnode *p,tbtnode *&pre)

if(pre->rchild==null&&pre!=null)

pre=p;

inthread(p->rchild,pre);

}}

注意中序遞迴遍歷的框架的構建,說白了,就是中序遍歷的同時,進行線索的連線。 

2:線索二叉樹的前序遍歷的構建,**如下:

void prethread(tbtnode *p,tbtnode *&pre)

if(pre->lchile=null&&pre!=null)

if(p->ltag==0)//注意遞迴條件的判斷

prethread(p->rchild,pre);

if(p->rtag==0)//注意遞迴條件的判斷

prethread(p->lchild,pre);

} }}

此**有乙個需要注意的地方即遞迴條件的控制。當此節點存在左右子樹時才需要進行遞迴,那麼,可能會有疑問,開頭的

if(p!=null)不就是控制遞迴結束的條件?不錯,此就是控制條件,但是不要忘了,這是前序遍歷的條件下,所以是先構建條件後進行遞迴,即拿任意乙個葉子節點來說,當p是葉子節點,此時p->lchild=pre,所以p->lchild不再是null,所以如果不加以控制,那麼遞迴就永遠不會停止!

3:後序遍歷下的線索二叉樹的構建,**如下:

void postthread(tbtnode*p,tbtnode *&pre)

if(pre!=null&&pre->rchild==null)

pre=p; }

}

掌握好後序遍歷的遞迴框架! 

//通過中序遍歷構建線索二叉樹的主程式。

void creatinthread(tbtnode *root)

}

資料結構之線索二叉樹

應用案例說明 將下面的二叉樹,進行中序線索二叉樹。中序遍歷的數列為 定義threadedbinarytree 實現了線索化功能的二叉樹 class threadedbinarytree 過載一把threadednodes方法 public void threadednodes 遍歷線索化二叉樹的方法...

資料結構之 線索二叉樹

2 線索二叉樹 實現 對於一顆二叉樹而言 如下圖所示 每次我們想要查詢二叉樹裡面的乙個節點的時候,我們都必須遍歷這棵樹,以中序遍歷為例,遍歷的順序為4251637,當我們遍歷到標號為5這個節點的時候,如果有個指標指向5的前乙個節點2或者後乙個節點1的話,那麼我們跳轉到2或者1的效率肯定會大大的提公升...

二叉樹的中序線索樹 資料結構 線索二叉樹

1.引入線索二叉樹 二叉樹的遍歷實質上是對乙個非線性結構實現線性化的過程,使每乙個節點 除第乙個和最後乙個外 在這些線性序列中有且僅有乙個直接前驅和直接後繼。但在二叉鍊錶儲存結構中,只能找到乙個節點的左 右孩子資訊,而不能直接得到節點在任一遍歷序列中的前驅和後繼資訊。這些資訊只有在遍歷的動態過程中才...