Day20 二叉树Part06

Day20 二叉树Part06

654. 最大二叉树 - 力扣(LeetCode)

递归构建即可

func constructMaximumBinaryTree(nums []int) *TreeNode {
    if len(nums) == 0 {
        return nil
    }
    var max int
    for i := 1; i < len(nums); i++ {
        if nums[max] < nums[i] {
            max = i
        }
    }
    temp := &TreeNode{
        Val: nums[max],
        Left: constructMaximumBinaryTree(nums[0: max]),
        Right: constructMaximumBinaryTree(nums[max+1:]),
    }
    return temp
}

617. 合并二叉树 - 力扣(LeetCode)

一起进行遍历拼接

func mergeTrees(root1 *TreeNode, root2 *TreeNode) *TreeNode {
    if root1 == nil {
        return root2
    }
    if root2 == nil {
        return root1
    }
    root1.Val += root2.Val
    root1.Left = mergeTrees(root1.Left, root2.Left)
    root1.Right = mergeTrees(root1.Right, root2.Right)
    return root1
}

700. 二叉搜索树中的搜索 - 力扣(LeetCode)

利用特性,超简单,第一次做的时候还没注意到是二叉搜索树

func searchBST(root *TreeNode, val int) *TreeNode {
    for root != nil { // 只要不为空
        if val == root.Val {
            return root // 找到对应的值
        }
        if val < root.Val {
            root = root.Left // 小于节点,在左边
        } else {
            root = root.Right // 大于节点在右边
        }
    }
    return nil
}

98. 验证二叉搜索树 - 力扣(LeetCode)

左边最大的必定小于右边最小的即可,或者进行中序遍历,只要有序即可

func isValidBST(root *TreeNode) bool {
    var f func(*TreeNode, int, int) bool
    f = func(r *TreeNode, min int, max int) bool {
        if r == nil {
            return true
        }
        if r.Val <= min || r.Val >= max {
            return false
        }
        return f(r.Left, min, r.Val) && f(r.Right, r.Val, max)
    }
    return f(root, math.MinInt, math.MaxInt)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值