二叉搜尋樹

2021-10-19 21:55:59 字數 2019 閱讀 7448

二叉搜尋樹又稱二叉排序樹

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

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

它的左右子樹也分別為二叉搜尋樹

**特點:**二叉搜尋樹的中序遍歷是有序的

思路:

**實現:

//查詢

public

boolean

search

(integer key)

else

if(result >0)

else

}return

false

;}

思路:插入時,插入位置在原樹內一定為null,如果樹內有重複值,拋出自定義異常

**實現:

//插入

public

void

insert

(integer key)

node current = root;

//定義乙個parent結點,parent結點始終為current的父節點

node parent = null;

while

(current != null)

else

if(result <0)

else

}//此時current結點為空,parent結點代表要插入結點的父節點,此時判斷插入結點在左還是右

int temp = key.

compareto

(parent.key);if

(temp <0)

else

}

思路:

**實現:

//刪除

public

boolean

remove

(integer key)

else

if(cmp<0)

else

}//沒找到

return

false;}

//node為找到的結點,parent為node的父節點

private

void

removeinternal

(node node, node parent)

else

if(node==parent.left)

else

}else

if(node.left!=null&&node.right==null)

else

if(node==parent.left)

else

}else

if(node.left==null&&node.right!=null)

else

if(node==parent.left)

else

}else

//1.替換node的key為ghost的key

node.key=ghost.key;

//2.刪除ghost結點(ghost的右孩子一定為空)

//<1>當node==ghostparent時,ghost是ghostparent的左孩子

if(node==ghostparent)

else

}}

插入和刪除操作都必須先查詢,查詢效率代表了二叉搜尋樹中各個操作的效能。

對有n個結點的二叉搜尋樹,若每個元素查詢的概率相等,則二叉搜尋樹平均查詢長度是結點在二叉搜尋樹的深度的函式,即結點越深,則比較次數越多。時間複雜度越大

最好:完全二叉樹o( log(n))

最壞:單支o(n*2)

二叉搜尋樹 二叉搜尋樹

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