線索化二叉樹:我的理解就是將乙個複雜的非線性結構轉化為線性結構,使每個節點都有前驅節點和後繼節點。
解決:解決了無法找到該節點在某種遍歷序列的前驅和後繼節點的問題,解決了二叉鍊錶找左右節點的問題。
這裡我選擇了中序線索化,並只粘出了關鍵**進行理解分析
節點物件
public
class
hero
public
void
setroot
(hero root)
//中序線索化二叉樹,線索化當前節點
public
void
threadtree
(hero node)
//(一)線索化左子樹
threadtree
(node.
getleft()
);//(二)線索化當前節點(難點)
//1.處理當前節點的前驅節點
if(node.
getleft()
==null)
//2.處理後繼節點
if(pre!=null&&pre.
getright()
==null)
//3.每次處理乙個節點後,將單前節點作為下一節點的前驅節點
pre = node;
//(三)線索化右子樹
threadtree
(node.
getright());}
分析:
中序遍歷時,首先遍歷到 8 節點;
1.這時會判斷當前節點(8節點)的左節點是否為空:
①若為空,就可以設定當前節點的前驅節點,由於剛開始遍歷,pre預設為null,所以8節點的前置節點設定為null;
②並設定當前節點的左節點型別為指向前驅節點;
if(node.getleft()==null)
操作完後會執行關鍵的一句:將當前節點設定為指向下個節點的前驅節點:pre = node;
2.如何處理當前節點的後繼節點?
處理後繼節點需要返回上一層遞迴,也就是返回到3節點,這時候pre為8,此時,就可以對pre進行判斷操作;
①若pre的右節點為空,並且pre不為空時,將當前節點(8節點)設定為pre的後繼節點
②並且設定pre(3節點)的型別為指向後繼節點
到此,主要分析就已經結束了 ----bye
線索化二叉樹以及遍歷線索化二叉樹
1.線索二叉樹基本介紹 n個結點的二叉鍊錶中含有n 1 公式 2n n 1 n 1 個空指標域。利用二叉鍊錶中的空指標域,存放指向該結點在某種遍歷次序下的前驅和後繼結點的指標 這種附加的指標稱為 線索 這種加上了線索的二叉鍊錶稱為線索鍊錶,相應的二叉樹稱為線索二叉樹 threaded binaryt...
線索化二叉樹
define crt secure no warnings 1 includeusing namespace std enum pointertag 列舉 其結構如下 void prevorderthreading 前序 void postorderthreading 後序 void inorder...
線索化二叉樹
二叉樹是一種非線性結構,遍歷二叉樹幾乎都是通過遞迴或者用棧輔助實現非遞迴的遍歷。用二叉樹作為儲存結構時,取到乙個節點,只能獲取節點的左孩子和右孩子,不能直接得到節點的任一遍歷序列的前驅或者後繼。為了儲存這種在遍歷中需要的資訊,我們利用二叉樹中指向左右子樹的空指標來存放節點的前驅和後繼資訊.二叉樹的結...