二叉搜尋樹的判斷 查插刪

2021-10-17 10:47:05 字數 1662 閱讀 7021

乙個二叉搜尋樹具有如下特徵:

節點的左子樹只包含小於當前節點的數。

節點的右子樹只包含大於當前節點的數。

所有左子樹和右子樹自身必須也是二叉搜尋樹。

letcode98. 驗證二叉搜尋樹

遞迴實現思路:

主函式isvalidbst傳入兩個引數null,表示剛開始的左右邊界是inf(無窮)

helper設計理念是二叉樹中,子樹中的所有節點值都在(lower,upper)之間

(也可以使用中序遍歷——遞增進行設計!)

class

solution

public

boolean

helper

(treenode node, integer lower, integer upper)

}

利用了二叉搜尋樹的基本性質進行設計

boolean

isinbst

(treenode root,

int target)

注意:

一旦涉及「改」,函式就要返回treenode型別,並且對遞迴呼叫的返回值進行接收。

treenode insertintobst

(treenode root,

int val)

letcode450. 刪除二叉搜尋樹中的節點

主要分為3種情況

1)刪除的節點下沒有子樹

2)刪除的節點下有一棵子樹

3)刪除的節點下有二棵子樹

如果是第一種情況就直接刪去就好

如果是第二種情況就直接子樹上移

如果是第三種情況就將該節點的左子樹中的最大值,替換該節點後進行刪除

或者該節點的右子樹中的最小值,替換該節點後進行刪除

對於3種情況如下圖所示

對於第一種情況來說:我們要刪除節點5(root),直接 return root.right 即可。

對於第二種情況來說:我們要刪除節點5(root),直接 return root.left 即可。

對於第三種情況來說:我們要刪除節點5(root),只需將root的左子樹放到root的右子樹的最下面的左葉子節點的左子樹上即可。如圖所示:

最後,我們將整個流程串起來,即為總體的邏輯流程。

class

solution

minnode.left = root.left;

return root.right;

}else

if(root.val > key)

else

if(root.val < key)

return root;

}}

判斷二叉搜尋樹

二叉查詢樹 binary search tree 又 二叉搜尋樹,二叉排序樹 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉排序樹。判斷某棵樹是否為二...

判斷二叉搜尋樹

判斷是否為二叉搜尋樹有兩種方法 1.遞迴 val表示值 left是左子樹 right是右子樹 lower 下界 比最小值還小 upper 上界 比最大值還大 class solution bool isvalidbst treenode root 2.中序遍歷 由二叉搜尋樹的性質,中序遍歷序列是遞增...

二叉搜尋樹 增刪查

性質 每個節點的key值各不相同 左子樹上所有節點的key值小於根結點 右子樹上的所有節點key值大於根結點 左右子樹都是二叉搜尋樹 insert插入 bool insert const k key 非遞迴插入 node cur root node parent null while cur els...