二叉搜尋樹

2021-07-09 18:18:41 字數 951 閱讀 2789

1、定義及屬性

二叉樹搜尋是以一棵二叉樹組成的。如圖1,一棵樹可以用乙個鍊錶的資料結構來表示,鍊錶中的每乙個結點就是乙個物件,每個結點包含如下屬性:key、right、left和p,他們分別指向右孩子、左孩子和父結點。如果孩子結點和父結點不存在,他們相應的屬性值為nil。根節點是二叉樹中唯一的父結點,它的指標值為nil

圖 1 二叉樹

2、二叉搜尋樹的性質

在二叉樹中,對於任意結點x,它的左子樹中的關鍵字最大不大於x.key,右子樹中的關鍵字不小於x.key;即 x.left.key<=x.key、x.right.key>=x.key。基於以上性質,所以同一組值的集合可以用不同的二叉搜尋樹表示。二叉搜尋樹的操作的最壞執行時間榆樹的高度成正比。圖(a)為包含6個結點、高度為2的二叉搜尋樹,圖(b)與圖(a)有相同關鍵字,但(b)的高度為4,即(a)相比(b)而言,(a)更高效。

3、歷遍

二叉搜尋樹的性質使我們可以通過乙個簡單的遞迴演算法來按序輸出子樹根結點的關鍵字,這種歷遍稱為中序歷遍(inorder tree walk)。(類似地,先序歷遍(preorder tree walk)中輸出的根結點的關鍵字在其左右子樹的關鍵字之前,而後序歷遍(postorder tree walk)輸出的根結點的關鍵字在其左右子樹之後。)呼叫下面演算法inorder-tree-walk(t.root)就可以輸出二叉搜尋樹t中所有元素。

inorder-tree-walk(x)

if x != nil

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 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 解釋 輸入為 ...