資料結構 線索二叉樹的線索化(中序 先序 後序)

2021-10-07 20:58:53 字數 1132 閱讀 3919

//線索二叉樹

#include

#include

typedef

struct threadnodethreadnode,

*threadtree;

threadnode *pre=

null

;//定義全域性變數pre,指向當前訪問結點的前驅

threadtree createthreadtree

(threadtree t,

bool isroot)

return t;

}void

visit

(threadnode *q)

if(pre!=

null

&& pre-

>rchild==

null

) pre=q;

}void

inthread

(threadtree t)

}void

createinthread

(threadtree t)

}void

prethread

(threadtree t)

prethread

(t->rchild);}

}void

createprethread

(threadtree t)

}void

postthread

(threadtree t)

}void

createpostthread

(threadtree t)

}int

main()

後序遍歷的線索化有乙個問題:當根節點的右孩子的rchild不為空時,由於後序線索二叉樹為 左、右、根 ,即乙個有子結點的結點的後繼為雙親節點,而此結點因為有右孩子,rchild指向右孩子無法指向其雙親節點,因此後序線索二叉樹中有左兒子和右兒子的點的lchild、rchild指向的是左兒子與右兒子(都是前驅),因此無法求後繼(前序無法求前驅同理)。

因此當根結點t的右孩子w的rchild!=null時,根節點t無法被遍歷(即w->rchild已被用,無法得到w的後繼t)。 (可用棧解決此問題)

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

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

資料結構 線索二叉樹(中序線索二叉樹及遍歷)

二叉樹的遍歷是按照一定的規則把二叉樹中的節點按照一定的次序排列成線性序列進行訪問的,實質上就是對乙個非線性結構進行線索化操作,使得每個節點 除第乙個和最後乙個外 都有前驅 和後繼節點,有時為了運算方便需要記錄這些前驅和後繼節點,稱為二叉樹線索化,而對於不同的遍歷規則,又分為先序線索二叉樹,中序線索二...

資料結構 中序線索二叉樹

所謂線索二叉樹無非是為了讓原本指向null的節點指向乙個詳細的 已經存在的節點,邏輯上實現指標的無空指向的實現。以下是我中 序線索二叉樹的實現。還是把先序線索二叉樹與後序線索分開來寫吧。include using namespace std template struct node template...