有乙個二叉搜尋
樹用來儲存字元'a', 'b', 'c','d','e','f','g','h'下面哪個結果是後序樹遍歷結果)[美國著名軟體
公司m2023年11月筆試題]
a.adbcegfh
b.bcagehfd
c.bcaefdhg
d.bdacefhg
解析:二叉搜尋樹(binary search tree),或者是一棵空樹,或者是具有下列性質的二
叉樹:對於樹中的每個節點x,它的左子樹中所有關鍵字的值都小於x的關鍵字值,而它的
右子樹中的所有關鍵字值都大於x的關鍵字值。這意味著該樹所有的元素都可以用某種統一
的方式排序。
例如下面就是一棵合法的二叉搜尋樹:
它的左、右子樹也分別為二叉搜尋樹。
二叉搜尋樹的查詢過程和次優二叉樹類似,通常採取二叉鍊錶作為二叉搜尋樹的儲存節
構。中序遍歷二叉搜尋樹可得到乙個關鍵字的有序序列,乙個無序序列可以通過構造一棵二
叉搜尋樹變成乙個有序序列,構造樹的過程即為對無序序列進行排序的過程。每次插入的新
的節點都是二叉搜尋樹上新的葉子節點,在進行插入操作時,不必移動其他節點,只需改動
某個節點的指標,由空變為非空即可。搜尋、插入、刪除的複雜度等於樹高,即o(log(n))。
二叉樹的乙個重要的應用是它們在查詢中的使用。二叉搜尋樹的概念相當容易理解,二
叉搜尋樹的性質決定了它在搜尋方面有著非常出色的表現:要找到一棵樹的最小節點,只需
要從根節點開始,只要有左兒子就向左進行,終止節點就是最小的節點。找最大的節點則是
往右進行。例如上面的例子中,最小的節點是1,在最左邊;最大的節點是8,在最右邊。
對於本題而言,二叉搜尋樹則必滿足對樹中任一非葉節點,其左子樹都小於該節點值,
右子樹所有節點值都大於該節點值。節合二叉樹後序遍歷的特點,最後乙個肯定是根節點
a.adbcegfh
->(h)左子樹(adbcegf),右子樹(空) (左子樹必須都小於根h,右子樹都大於根h)
-->(f)左子樹(adbce),右子樹(g)
--->(e)左子樹(adbc),右子樹(空)
---->(c)剩下(adb)不能區別左子樹,右子樹,所以選項a不成立;
b.bcagehfd
->(d, (bca), (gehf))
-->gehf, f為根,剩下geh不能根據f分成兩個子段,所以b不成立;
選項c成立;
d.bdacefhg
->(g, (bdacef), (h))
-->(g, (f, (bdace), ()), (h))
--->(g, (f, (e, (bdac), ()), ()), (h))
---->bdac子樹,c為根,據c不能將序列bda劃分為兩個子串行,使得左子串行全小於
c,右子串行全大於c
所以選項d不成立。
答案:c
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...
二叉搜尋樹 修剪二叉搜尋樹
第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...
樹 二叉樹 二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...