二分搜尋樹中刪除結點 Java實現

2021-09-22 21:23:16 字數 984 閱讀 6195

二分搜尋樹的定義為:

(1)所有左子樹中的結點小於等於根節點

(2)所有右子樹中的結點大於等於根節點

(3)其任意子樹也滿足(1), (2)

(注意是所有結點)

二分搜尋樹刪除結點

主要可以分為以下三種情況:

(1)被刪除的結點為葉子結點:直接將其置為空即可;

(2)被刪除的結點只有左孩子或右孩子,用其左孩子或右孩子替代即可;

(3)被刪除的結點左右孩子都不為空:可以採取兩種做法:

a. 尋找其左子樹中的最大值,並將當前結點替換為該值,遞迴在左子樹中刪除該值;

b. 尋找其右子樹中的最小值,並將當前結點替換為該值,遞迴在右子樹中刪除該值;

**實現

class

solution

if(key > root.val)

//1.該結點為葉子結點,直接刪除

if(root.left == null && root.right == null)

//2.該結點右孩子為空(左孩子替代)

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

//3.該結點左孩子為空(右孩子替代)

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

//4.左右孩子都不為空(挑選左子樹中最大的或者右子樹中最小的,替換當前節點)

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

return root;

}//尋找以node為根結點的最大值

private

intfindmaxleft

(treenode node)

return

findmaxleft

(node.right);}

}

參考:

leetcode 450. delete node in a bst

二分搜尋樹(JAVA)

二分搜尋樹是在二叉樹的基礎上定義 所有節點的左子節點需要小於 不大於 該節點,右子節點需要大於 不小於 該節點 實現 如下 注意 這裡實現的二分搜尋樹會去重,如果允許重複節點,則在新增元素時,定義值相等的元素存放在節點的左子節點或右子節點中。public class bstcomparable pr...

二分搜尋樹 JAVA版

created by enzo cotter on 2018 7 16.public class bstextends comparable private node root private int size public bst public intsize public boolean ise...

玩轉 二分搜尋樹 lee450 刪除二分搜尋樹節點

給定乙個二叉搜尋樹的根節點 root 和乙個值 key,刪除二叉搜尋樹中的 key 對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹 有可能被更新 的根節點的引用。一般來說,刪除節點可分為兩個步驟 首先找到需要刪除的節點 如果找到了,刪除它。說明 要求演算法時間複雜度為 o h h 為樹的高度...