450. 刪除二叉搜尋樹中的節點
給定乙個二叉搜尋樹的根節點root和乙個值key,刪除二叉搜尋樹中的key對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹(有可能被更新)的根節點的引用。一般來說,刪除節點可分為兩個步驟:
首先找到需要刪除的節點;
如果找到了,刪除它。
說明:要求演算法時間複雜度為 o(h),h 為樹的高度。
示例:
root = [5,3,6,2,4,null,7]
key = 3
5/ \
3 6
/ \ \
2 4 7
給定需要刪除的節點值是 3,所以我們首先找到 3 這個節點,然後刪除它。
乙個正確的答案是 [5,4,6,2,null,null,7], 如下圖所示。
5/ \
4 6
/ \
2 7
另乙個正確答案是 [5,2,6,null,4,null,7]。
5/ \
2 6
\ \
4 7
第一種情況是,如果要刪除的節點沒有子節點,如果要刪除的節點沒有子節點,我們只需要直接將父節點中,指向要刪除的節點的指標設定為null第二種情況是,如果要刪除的節點只有乙個子節點(只有左子節點或右子節點),我們只需要更新父節點中,指向要刪除節點的指標,讓它指向要刪除節點的子節點就可以了
第三種情況是,如果要刪除的節點有兩個子節點,這就比較複雜了。我們需要找到這個節點的右子樹中的最小節點,把它替換到要刪除的節點上。然後再刪除掉這個最小節點,因為最小節點肯定沒有左子節點(如果有左子結點,那就不是最小節點了),所以,我們可以應用上面兩條規則來刪除這個最小節點
/**
* definition for a binary tree node.
* public class treenode
* }*/class
solution
if(p==null)
return root;
if(p.left!=null&&p.right!=null)
p.val=minp.val;
p=minp;
pp=minpp;
} treenode child=null;
if(p.left!=null)
child=p.left;
else
if(p.right!=null)
child=p.right;
else
child=null;
if(pp==null)
root=child;
else
if(pp.left==p)
pp.left=child;
else
pp.right=child;
return root;
}}
Leetcode 450 刪除二叉搜尋樹中的節點
給定乙個二叉搜尋樹的根節點root和乙個值key,刪除二叉搜尋樹中的key對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹 有可能被更新 的根節點的引用。一般來說,刪除節點可分為兩個步驟 首先找到需要刪除的節點 如果找到了,刪除它。說明 要求演算法時間複雜度為 o h h 為樹的高度。示例 r...
Leetcode 450 刪除二叉搜尋樹中的節點
給定乙個二叉搜尋樹的根節點root和乙個值key,刪除二叉搜尋樹中的key對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹 有可能被更新 的根節點的引用。一般來說,刪除節點可分為兩個步驟 首先找到需要刪除的節點 如果找到了,刪除它。說明 要求演算法時間複雜度為 o h h 為樹的高度。示例 r...
LeetCode 450 刪除二叉搜尋樹中的節點
給定乙個二叉搜尋樹的根節點root和乙個值key,刪除二叉搜尋樹中的key對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹 有可能被更新 的根節點的引用。一般來說,刪除節點可分為兩個步驟 首先找到需要刪除的節點 如果找到了,刪除它。說明 要求演算法時間複雜度為 o h h 為樹的高度。示例 r...