450. 刪除二叉搜尋樹中的節點
給定乙個二叉搜尋樹的根節點root和乙個值key,刪除二叉搜尋樹中的key對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹(有可能被更新)的根節點的引用。
一般來說,刪除節點可分為兩個步驟:
首先找到需要刪除的節點;
如果找到了,刪除它。
示例 1:
輸入:root = [5,3,6,2,4,null,7], key = 3
輸出:[5,4,6,2,null,null,7]
解釋:給定需要刪除的節點值是 3,所以我們首先找到 3 這個節點,然後刪除它。
乙個正確的答案是 [5,4,6,2,null,null,7], 如下圖所示。
另乙個正確答案是 [5,2,6,null,4,null,7]。
示例 2:
輸入:root = [5,3,6,2,4,null,7], key = 0
輸出:[5,3,6,2,4,null,7]
解釋:二叉樹不包含值為 0 的節點
示例 3:
輸入:root = , key = 0
輸出:
高階:要求演算法時間複雜度為 o(h),h 為樹的高度。
情況 1:a 恰好是末端節點,兩個子節點都為空,那麼它可以當場去世了:
情況 2:a 只有乙個非空子節點,那麼它要讓這個孩子接替自己的位置:
情況 3:a 有兩個子節點,麻煩了,為了不破壞 bst 的性質,a 必須找到左子樹中最大的那個節點或者右子樹中最小的那個節點來接替自己,我的解法是用右子樹中最小節點來替換:
Leetcode 450 刪除二叉搜尋樹中的節點
給定乙個二叉搜尋樹的根節點root和乙個值key,刪除二叉搜尋樹中的key對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹 有可能被更新 的根節點的引用。一般來說,刪除節點可分為兩個步驟 首先找到需要刪除的節點 如果找到了,刪除它。說明 要求演算法時間複雜度為 o h h 為樹的高度。示例 r...
Leetcode 450 刪除二叉搜尋樹中的節點
給定乙個二叉搜尋樹的根節點root和乙個值key,刪除二叉搜尋樹中的key對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹 有可能被更新 的根節點的引用。一般來說,刪除節點可分為兩個步驟 首先找到需要刪除的節點 如果找到了,刪除它。說明 要求演算法時間複雜度為 o h h 為樹的高度。示例 r...
leetcode450 刪除二叉搜尋樹中的節點
450.刪除二叉搜尋樹中的節點 給定乙個二叉搜尋樹的根節點root和乙個值key,刪除二叉搜尋樹中的key對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹 有可能被更新 的根節點的引用。一般來說,刪除節點可分為兩個步驟 首先找到需要刪除的節點 如果找到了,刪除它。說明 要求演算法時間複雜度為 ...