做習題,學知識--線索二叉樹

二叉樹在線索化後,仍不能有效求解的問題是()

A、先序線索二叉樹中求先序後繼    

B、中序線索二叉樹中求中序後繼

C、中序線索二叉樹中求中序前驅    

D、後序線索二叉樹中求後序後繼

因爲有同學問到:線索二叉樹的結構不是會多出兩個指針域來存放前驅和後繼的嗎?

那麼我們先來看看在嚴蔚敏老師的數據結構教材中對線索二叉樹的定義:

從書中我們可以得出,線索二叉樹的確多出了兩個指針域 LTag 和 RTag,但不是用來存放結點前驅、後繼,而是指示左右孩子是否存在。

那麼我們開始分析題目:

首先,我們要先對樹的遍歷有一定的瞭解,不清楚的夥伴可以查看我的歷史文章 【數據結構】二叉樹的中序遍歷 。

先序遍歷(中左右)、中序遍歷(左中右)的最後訪問的節點都是左或右葉節點,葉節點是沒有子樹的,所以兩個指針域空出來了,可以存放線索指針。但是後序遍歷(左右中),最後訪問的是子樹的根節點,而子樹根節點的指針域指向了子樹,所以不可能空出來存放線索信息。

舉個例子:

對於上面這棵樹,它的遍歷結果是這樣子的:

先序遍歷:A->B->D->E->C->F->G
中序遍歷:D->B->E->A->F->C->G
後序遍歷:D->E->B->F->G->C->A

A選項中,
結點 A->B->D 這串可以從子指針得到
結點 D->E->C 由於子指針是空的,可以從子指針生成線索

結點 C->F->G 由上可得

同理,也能解得 B、C 選項的正確性。

而對於 D 選項,

結點 C->A 是不可能達到,因爲結點 C 的左右兒子都是滿的,已經沒有地方存線索,所以不可能線索化。

因此答案就出來了:選 D 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章