mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
Update 0450.删除二叉搜索树中的节点.md
添加 Go 语言迭代版本
This commit is contained in:
@ -320,6 +320,7 @@ class Solution:
|
|||||||
|
|
||||||
Go:
|
Go:
|
||||||
```Go
|
```Go
|
||||||
|
// 递归版本
|
||||||
func deleteNode(root *TreeNode, key int) *TreeNode {
|
func deleteNode(root *TreeNode, key int) *TreeNode {
|
||||||
if root==nil{
|
if root==nil{
|
||||||
return nil
|
return nil
|
||||||
@ -356,6 +357,51 @@ func deleteNode1(root *TreeNode)*TreeNode{
|
|||||||
root.Left=deleteNode1(root.Left)
|
root.Left=deleteNode1(root.Left)
|
||||||
return root
|
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版本
|
JavaScript版本
|
||||||
|
Reference in New Issue
Block a user