複習二叉樹之線索二叉樹

2021-10-01 04:10:17 字數 1356 閱讀 4189

#include

/*線索二叉樹是在遍歷的過程中線索化*/

typedef

struct bithrnodebithrnode,

*bithrtree;

bithrtree pre;

//全域性變數

//建立二叉鍊錶 先序遍歷建立

//關鍵在於「#」,表明空樹

void

createbitree

(bithrtree &a)

else

}//為什麼是中序線索化?

//中序線索化的特點是結點的前驅是遍歷左子樹時訪問的最後乙個結點(左子樹最右下的結點)

//和前面結點建立好關係,接著後面與前面

void

intheading

(bithrtree &a)

elseif(

!pre->rchild)

else

pre=a;

intheading

(a->rchild)

;//這不是while迴圈a=a->rchild;}}

void inoderintheading (bithrtree &thrt,bithrtree a)

else

}//關於遍歷線索二叉樹

//void inordertraserve(bithrtree a)

//}

//}

//關於上面**的錯誤

//線索二叉樹類似乙個迴圈鍊錶,必須要有乙個截至條件

//完全理解錯遍歷中序線索二叉樹,將其理解為化成原本的格式

void

inordertraserve

(bithrtree a)

printf

("%c"

,p->data)

;//下面這一段**很不理解

while

(p->rtag==

1&&p->rchild!=a)

p=p->rchild;

//當成另外乙個子樹 }}

//沒有初始化二叉樹?

intmain()

//c語言輸入單字元避免回車的方法

//在scanf()中使用'\n'遮蔽回車符號。

//在scanf()格式串最前面新增空格,遮蔽回車字元

//在接收字元前,使用getchar()來讀取一次回車符號

//在接收字元前,使用fflush()清空輸入流中緩衝區中的內容

//scanf("%d",&n)

//fflush(stdin); //清空輸入流緩衝區的字元,注意必須引入#include

//scanf("%c",&c);

二叉樹之 線索二叉樹

二叉樹是一種非線性結構,遍歷二叉樹幾乎都是通過遞迴或者用棧輔助實現非遞迴的遍歷。用二叉樹作為儲存結構時,取到乙個節點,只能獲取節點的左孩子和右孩子,不能直接得到節點的任一遍歷序列的前驅或者後繼。為了儲存這種在遍歷中需要的資訊,我們利用二叉樹中指向左右子樹的空指標來存放節點的前驅和後繼資訊 對於n個結...

樹 二叉樹 線索二叉樹

一 線索二叉樹 1 什麼是線索化 將二叉樹以某種次序將其遍歷,得到線性序列,就是將非線性結構進行線索化。線索化的優點就是可以很快地得到前驅或後繼。如果儲存線索化的線性序列 儲存二叉樹地線索化序列的其中一種方法就是在結點上加兩個指標,乙個指向前驅乙個指向後繼,這樣的缺點就是儲存密度大大降低。另一種方法...

線索二叉樹

當用二叉鍊錶作為二叉樹的儲存結構時,因為每個結點中只有指向其左 右兒子結點的指標,所以從任一結點出發只能直接找到該結點的左 右兒子。在一般情況下靠它無法直接找到該結點在某種遍歷序下的前驅和後繼結點。如果在每個結點中增加指向其前驅和後繼結點的指標,將降低儲存空間的效率。我們可以證明 在n個結點的二叉鍊...