mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 07:35:35 +08:00
Merge pull request #576 from Spongecaptain/patch-4
Update 0450.删除二叉搜索树中的节点.md
This commit is contained in:
@ -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版本
|
||||
|
Reference in New Issue
Block a user