Merge pull request #576 from Spongecaptain/patch-4

Update 0450.删除二叉搜索树中的节点.md
This commit is contained in:
程序员Carl
2021-08-08 15:32:55 +08:00
committed by GitHub

View File

@ -320,6 +320,7 @@ class Solution:
Go
```Go
// 递归版本
func deleteNode(root *TreeNode, key int) *TreeNode {
if root==nil{
return nil
@ -356,6 +357,51 @@ func deleteNode1(root *TreeNode)*TreeNode{
root.Left=deleteNode1(root.Left)
return root
}
// 迭代版本
func deleteOneNode(target *TreeNode) *TreeNode {
if target == nil {
return target
}
if target.Right == nil {
return target.Left
}
cur := target.Right
for cur.Left != nil {
cur = cur.Left
}
cur.Left = target.Left
return target.Right
}
func deleteNode(root *TreeNode, key int) *TreeNode {
// 特殊情况处理
if root == nil {
return root
}
cur := root
var pre *TreeNode
for cur != nil {
if cur.Val == key {
break
}
pre = cur
if cur.Val > key {
cur = cur.Left
} else {
cur = cur.Right
}
}
if pre == nil {
return deleteOneNode(cur)
}
// pre 要知道是删除左孩子还有右孩子
if pre.Left != nil && pre.Left.Val == key {
pre.Left = deleteOneNode(cur)
}
if pre.Right != nil && pre.Right.Val == key {
pre.Right = deleteOneNode(cur)
}
return root
}
```
JavaScript版本