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