LeetCode 450 刪除二叉搜尋樹中的節點

2021-09-25 22:00:23 字數 1181 閱讀 5521

題目描述:

給定乙個二叉搜尋樹的根節點 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

思路:刪除的節點一共分為三種情況

1、刪除的節點是葉子節點,則直接刪除

2、刪除的節點只有一側子樹,則刪除節點後,將這側子樹連線到刪除節點的位置

3、刪除的節點左右子樹都存在,則需要找到左子樹的最大節點或者右子樹的最小節點,然後賦值給當前節點,再去左子樹刪除這個最大節點或者去右子樹刪除這個最小節點

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

treenode* deletenode(treenode* root, int key)

else if(root->right==null)

//找到左子樹中的最大值,賦值給當前根節點,再遞迴刪除左子樹的最大值

//或者找到右子樹的最小值,賦值給當前根節點,再遞迴刪除右子樹的最小值

Leetcode 450 刪除二叉搜尋樹中的節點

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

Leetcode 450 刪除二叉搜尋樹中的節點

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

leetcode450 刪除二叉搜尋樹中的節點

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