二叉搜尋樹

2021-06-20 17:47:49 字數 1589 閱讀 5614

二叉搜尋樹(binary search tree)也稱作二叉排序樹。二叉搜尋樹或者是一棵空樹,或者是具有以下性質的二叉樹:

(1)若它的左子樹不為空,則左子樹上所有的節點值小於它的根節點的值

(2)若它的右子樹不為空,則右子樹上所有的節點值大於它的根節點的值

(3)它的左右子樹也是二叉搜尋樹

二叉搜尋樹的插入演算法:

if 樹為空

把新節點賦值給根節點

else 

如果新值小於當前節點的值:

把新值插入到當前節點的左子樹

如果新值大於當前節點的值:

把新值插入到當前節點的右子樹

否則:error

刪除演算法:

if樹為空

error;

eles

如果刪除的節點沒有孩子,直接free

如果刪除的節點有乙個孩子,則把該節點的雙親節點和該節點的孩子節點連線起來

如果刪除的節點有兩個孩子,則把右子樹中最小的節點,複製給待刪除節點,最後將右子樹中最小的節點刪除掉。

#include #include #include #define type int

typedef struct tnodetnode,*ptrnode;

ptrnode bst_insert(type x,ptrnode proot);

ptrnode bst_find(type x,ptrnode proot);

ptrnode bst_delete(type x,ptrnode proot);

void bst_midprint(ptrnode proot);

ptrnode findmin(ptrnode proot);

int main()

ptrnode findmin(ptrnode proot)

/*ptrnode bst_insert(type x,ptrnode proot) //遞迴實現

else

return proot;

}*/ptrnode bst_insert(type x,ptrnode proot)//非遞迴實現

二叉搜尋樹 二叉搜尋樹

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