mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-20 04:44:03 +08:00
Update 0450.删除二叉搜索树中的节点.md JavaScript递归版本
This commit is contained in:
@ -456,31 +456,42 @@ func deleteNode(root *TreeNode, key int) *TreeNode {
|
||||
* @param {number} key
|
||||
* @return {TreeNode}
|
||||
*/
|
||||
var deleteNode = function (root, key) {
|
||||
if (root === null)
|
||||
return root;
|
||||
if (root.val === key) {
|
||||
if (!root.left)
|
||||
return root.right;
|
||||
else if (!root.right)
|
||||
return root.left;
|
||||
else {
|
||||
let cur = root.right;
|
||||
while (cur.left) {
|
||||
cur = cur.left;
|
||||
}
|
||||
cur.left = root.left;
|
||||
root = root.right;
|
||||
delete root;
|
||||
return root;
|
||||
}
|
||||
}
|
||||
if (root.val > key)
|
||||
root.left = deleteNode(root.left, key);
|
||||
if (root.val < key)
|
||||
var deleteNode = function(root, key) {
|
||||
if (!root) return null;
|
||||
if (key > root.val) {
|
||||
root.right = deleteNode(root.right, key);
|
||||
return root;
|
||||
return root;
|
||||
} else if (key < root.val) {
|
||||
root.left = deleteNode(root.left, key);
|
||||
return root;
|
||||
} else {
|
||||
// 场景1: 该节点是叶节点
|
||||
if (!root.left && !root.right) {
|
||||
return null
|
||||
}
|
||||
// 场景2: 有一个孩子节点不存在
|
||||
if (root.left && !root.right) {
|
||||
return root.left;
|
||||
} else if (root.right && !root.left) {
|
||||
return root.right;
|
||||
}
|
||||
// 场景3: 左右节点都存在
|
||||
const rightNode = root.right;
|
||||
// 获取最小值节点
|
||||
const minNode = getMinNode(rightNode);
|
||||
// 将待删除节点的值替换为最小值节点值
|
||||
root.val = minNode.val;
|
||||
// 删除最小值节点
|
||||
root.right = deleteNode(root.right, minNode.val);
|
||||
return root;
|
||||
}
|
||||
};
|
||||
function getMinNode(root) {
|
||||
while (root.left) {
|
||||
root = root.left;
|
||||
}
|
||||
return root;
|
||||
}
|
||||
```
|
||||
|
||||
迭代
|
||||
|
Reference in New Issue
Block a user