中序線索二叉樹 查詢指定結點在後序的前驅結點

2021-09-26 06:47:28 字數 1027 閱讀 6313

【題目描述】

寫出在中序線索二叉樹裡查詢指定結點在後序的前驅結點的演算法。

【分析】

這道題目的前提是我們已經有了中序線索二叉樹。在二叉樹後序序列中,對於結點p,其前驅依次有可能是:①p的右孩子②沒有右孩子,那就可能是左孩子③沒有孩子,那就可能是其父結點的左孩子④否則,可能是其爺爺結點的左孩子,以此類推。

對於①②,特判即可。對於③,中序線索二叉樹中,p無左孩子,則其左指標域指向其父,故可向上訪問,直到有乙個祖先有左孩子,則這個左孩子一定是後序遍歷p的前驅。

注意,設中序序列第乙個結點為x,若p按④一直尋到了x,則p在後序中無前驅。因為p就是後序第乙個。

【樣例】

測試樣例先序建樹:abd##e##c#fg##h##

【測試完整**】

#include#includestruct node;

struct node *node_arr[100]; //儲存下所有結點的指標

int node_arr_top=0;

struct node* createtree() //先序建樹,樣例abd##e##c#fg##h##

return null;

}//二叉樹中序線索化

void converttoxiansuo(struct node *root, struct node **last)

if((*last)!=null && (*last)->rchild==null)

*last = root;

converttoxiansuo(root->rchild,last); //線索化右子樹

}}void xiansuohua(struct node *root) //中序線索化

struct node* preofbackorder(struct node* p) //求後序序列中p的前驅

int main()

}

二叉數查詢指定結點

指定的節點用節點儲存的資料來代表,採用遞迴的方法先判斷當前節點是否是目標節點,若不是則依次查詢左子樹和右子樹 include include using namespace std typedef struct tr tre,tree stack st tree creat tree root,in...

中序線索二叉樹

就是在中序遍歷的時候加上線索,為了區分線索和孩子,要多加兩個標誌變數ltag,rtag如果標誌為true就表明是線索,如果為false就表示孩子 一般規定是將做指標為空的指標域用來存放直接前驅 將有指標為空的指標域用來存放直接後繼 當然如果不為空的話就不會用來存放前後繼,而是孩子了 意思就是存放前繼...

二叉樹中序線索

我先說一說 每個 節點 那 五個格 的資料 的含義中間拿乙個是儲存資料的。從左向右 第乙個 和 第五個 是指標,具體指向什麼 取決於第二個 和 第四個的值 第二個 如果是零,實線表示,則 第乙個指向的是 左孩子 第二個 如果是1,虛線表示,則 第乙個 指向的是 在中序遍歷次序下 該節點的前驅 即前乙...