刪除二叉搜尋樹中的節點
給定乙個二叉搜尋樹的根節點 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
/**
* definition for a binary tree node.
* public class treenode
* treenode(int val)
* treenode(int val, treenode left, treenode right)
* }*/// class solution
// if (root.val == key)
// if (root.right == null)
// if (root.left != null && root.right != null)
// root.val = minnode.val;
// root.right = deletenode(root.right, minnode.val);
// }
// } else if (root.val > key) else
// return root;
// }
// }
class
solution
treenode p = root, pre = null;
while
(p != null && p.val != key)
if(pre == null)
if(pre.left != null && pre.left.val == key)
if(pre.right != null && pre.right.val == key)
return root;
}public treenode deletenode
(treenode target)
// 如果右子樹為空,則返回左子樹
if(target.right == null)
// 將目標節點的左子樹放到右子樹的最左節點的左邊
treenode minnode = target.right;
while
(minnode.left != null)
minnode.left = target.left;
return target.right;
}}
450 刪除二叉搜尋樹中的節點
給定乙個二叉搜尋樹的根節點 root 和乙個值 key,刪除二叉搜尋樹中的 key 對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹 有可能被更新 的根節點的引用。一般來說,刪除節點可分為兩個步驟 首先找到需要刪除的節點 如果找到了,刪除它。說明 要求演算法時間複雜度為 o h h 為樹的高度...
450 刪除二叉搜尋樹中的節點
給定乙個二叉搜尋樹的根節點 root 和乙個值 key 刪除二叉搜尋樹中的 key 對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹 有可能被更新 的根節點的引用。一般來說,刪除節點可分為兩個步驟 首先找到需要刪除的節點 如果找到了,刪除它。說明 要求演算法時間複雜度為 o h h 為樹的高度...
450 刪除二叉搜尋樹中的節點 遞迴
給定乙個二叉搜尋樹的根節點 root 和乙個值 key,刪除二叉搜尋樹中的 key 對應的節點,並保證二叉搜尋樹的性質不變。返回二叉搜尋樹 有可能被更新 的根節點的引用。一般來說,刪除節點可分為兩個步驟 首先找到需要刪除的節點 如果找到了,刪除它。示例 輸入 root 5,3,6,2,4,null,...