二叉搜尋樹

2021-08-23 14:20:49 字數 1218 閱讀 7915

二叉搜尋樹(bst)也稱為二叉排序樹或二叉查詢樹。

二叉搜尋樹:一棵二叉樹,可以為空;如果不為空,滿足以下性質。

查詢從根結點開始,如果樹為空,返回null。

若樹非空,則根結點關鍵字和x進行比較,並進行處理:

若兩者比較結果相等,搜尋完成,返回指向此結點的指標。

上述**是用尾遞迴(在程式分支的最後進行遞迴),效率不高。從編譯的角度講,尾遞迴都是可以用迴圈來實現的。所以,可將尾遞迴改為迭代函式。

position iterfind( elementtype x, bintree bst )

return null;

}

最大元素一定是在樹的最右分支的端結點上 

最小元素一定是在樹的最左分支的端結點上

//查詢最小值的遞迴演算法

position findmin( bintree bst )

else

}//查詢最大值的迭代演算法

}

有三種情況

要刪除的是葉結點:直接刪除,並修改其父結點指標—置為null

要刪除的結點只有乙個孩子結點:將其父結點的指標指向要刪除結點的孩子結點。

要刪除的結點有左、右兩棵子樹:用另一結點替代被刪除的結點:右子樹的最小元素,或者左子樹的最大元素。

bintree delete( elementtype x, bintree bst )

else

}

return bst

}

二叉搜尋樹 二叉搜尋樹

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