[代码随想录]Day20-二叉树part09

题目:669. 修剪二叉搜索树

思路:

遍历到的值小于最小值,说明左子树里的所有节点都小于最小值,舍弃左子树。

遍历到的值大于最大值,说明右子树里的所有节点都大于最大值,舍弃右子树。

如果在范围内,就拼接左右子树然后返回节点

代码:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func trimBST(root *TreeNode, low int, high int) *TreeNode {
    if root == nil {
        return nil
    }
    if root.Val < low { // 小于最小值舍弃左子树,找右子树
        return trimBST(root.Right, low, high)
    }
    if root.Val > high { // 大于最大值舍弃右子树,找左子树
        return trimBST(root.Left, low, high)
    }
    // 范围内拼接左右,返回根树
    root.Left = trimBST(root.Left, low, high)
    root.Right = trimBST(root.Right, low, high)
    return root
}

参考:

代码随想录

题目:108. 将有序数组转换为二叉搜索树

思路:

每次找中间的位置作为根,然后添加左右子树即可

代码:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func sortedArrayToBST(nums []int) *TreeNode {
    lens := len(nums) 
    if lens == 0 {
        return nil
    }
    lens = lens / 2 //  找中点
    root := &TreeNode{ // 创建根节点
        Val:nums[lens],
        Left: sortedArrayToBST(nums[:lens]), // 建立左子树
        Right: sortedArrayToBST(nums[lens+1:]), // 建立右子树
    }
    return root
}

参考:

代码随想录

题目:538. 把二叉搜索树转换为累加树

思路:

image.png

也就是说按照右中左的顺序递归,同时和二叉树:搜索树的最小绝对差 (opens new window)二叉树:我的众数是多少?一样都需要记录上一个节点。

代码:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
var pre *TreeNode
func convertBST(root *TreeNode) *TreeNode {
    pre = nil
    step(root)
    return root
}

func step(root *TreeNode) {
    if root == nil {
        return 
    }
    step(root.Right) // 右
    if pre != nil { // 中
        root.Val = pre.Val + root.Val   
    }
    pre = root // 完成当前节点再去修改
    step(root.Left) // 左
    return
} 

参考:

代码随想录

posted @   WtcSky  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示