二叉搜尋樹

2021-10-07 05:29:56 字數 2526 閱讀 2692

二叉搜尋樹是一種特殊的二叉樹,treeset,treemap的底層實現結構

1)根節點的左子樹的值都比根節點的值小

2)根節點的右子樹的值都比根節點的值大

中序遍歷二叉搜尋樹,得到的是乙個有序序列

最核心的用途:用來查詢元素

3.二叉樹的操作:查詢,插入,刪除

}//根節點,root為空的時候表示這是個空樹

private node root = null;

public node find

(int key)

else

if(key > cur.key)

else

}//迴圈結束之後也沒找到,key就不存在

先找到待插入元素的合適位置,再插入元素

//二叉搜尋樹中不允許存在相同的key的元素

//如果發現新插入的key重複了,那就插入失敗,返回false

//插入成功返回true

public

boolean

insert

(int key)

//和查詢類似,需要先找到合適的位置,再去插入元素

node cur = root;

node parent = null;

//parent始終指向cur的父節點

while

(cur != null)

else

if(key > cur.key)

else

}//迴圈結束的時候,cur就指向null,當前元素就要插入到parent的子樹位置上

//再比較看是插入到左子樹還是右子樹

if(key < parent.key)

else

return

true

;}

需要考慮多種情況

//迴圈結束時,scopegoat指向了右子樹中的最小值

//2)把剛才找到的替罪羊的值賦給待刪除結點

cur.key=scopegoat.key;

//3)刪除替罪羊結點

//替罪羊結點一定沒有左子樹(和情況a,b類似)

二叉搜尋樹 二叉搜尋樹

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