Update 0669.修剪二叉搜索树.md

添加 Go 语言迭代版本
This commit is contained in:
wjjiang
2021-08-10 10:17:59 +08:00
committed by GitHub
parent 369e55ed67
commit 64b4a59072

View File

@ -296,6 +296,7 @@ Go
* Right *TreeNode
* }
*/
// 递归
func trimBST(root *TreeNode, low int, high int) *TreeNode {
if root==nil{
return nil
@ -312,6 +313,37 @@ func trimBST(root *TreeNode, low int, high int) *TreeNode {
root.Right=trimBST(root.Right,low,high)
return root
}
// 迭代
func trimBST(root *TreeNode, low int, high int) *TreeNode {
if root == nil {
return nil
}
// 处理 root让 root 移动到[low, high] 范围内,注意是左闭右闭
for root != nil && (root.Val<low||root.Val>high){
if root.Val < low{
root = root.Right
}else{
root = root.Left
}
}
cur := root
// 此时 root 已经在[low, high] 范围内,处理左孩子元素小于 low 的情况(左节点是一定小于 root.Val因此天然小于 high
for cur != nil{
for cur.Left!=nil && cur.Left.Val < low{
cur.Left = cur.Left.Right
}
cur = cur.Left
}
cur = root
// 此时 root 已经在[low, high] 范围内,处理右孩子大于 high 的情况
for cur != nil{
for cur.Right!=nil && cur.Right.Val > high{
cur.Right = cur.Right.Left
}
cur = cur.Right
}
return root
}
```