【題目描述】
寫出在中序線索二叉樹裡查詢指定結點在後序的前驅結點的演算法。
【分析】
這道題目的前提是我們已經有了中序線索二叉樹。在二叉樹後序序列中,對於結點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,虛線表示,則 第乙個 指向的是 在中序遍歷次序下 該節點的前驅 即前乙...