每日编程(十一)--leetcode刷题

题目:平衡二叉树

题目描述:

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

示例 1:

给定二叉树 [3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7

返回 true 。

分析:没什么可说的,双递归,先判断是否为空,再判断节点是否平衡,节点平衡后,再判断左节点和右节点,判断平衡当然通过该节点的左右深度进行比较

上代码:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func isBalanced(root *TreeNode) bool {
    if root==nil{
        return true
    }
    if countFloor(root.Left)-countFloor(root.Right)>1 || countFloor(root.Left)-countFloor(root.Right) < -1{
        return false
    }else{
        if isBalanced(root.Left) && isBalanced(root.Right){
            return true
        }else{
            return false
        }
    }
    return true
}
func countFloor(root *TreeNode) int{
    if root==nil {
       return 0 
    }
    max:=0
    a:=countFloor(root.Left)
    b:=countFloor(root.Right)
    if a>b{
        max=a
    }else{
        max=b
    }
    return 1+max
}

题目:二叉树的最小深度

题目描述:

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明: 叶子节点是指没有子节点的节点。

示例:

给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回它的最小深度  2.

分析:也许有人会疑问,这很简单啊,没错一开始我也觉得,马上三行代码解决,结果出现了错误

19 / 41 个通过测试用例

状态:

解答错误

 

提交时间:0 分钟之前

输入:[1,2]

输出:1

预期:2

???为什么输出2呢,再看题目发现有一个小玄机:最小深度是从根节点到最近叶子节点的最短路径上的节点数量。注意必须是叶子节点,所以这下就必须判断下当前节点的状态了;

不多说,上代码自行感受:

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func minDepth(root *TreeNode) int {
    if root==nil{
        return 0
    }
    min:=0
    if root.Left!=nil && root.Right!=nil{
         a:=minDepth(root.Left)
       b:=minDepth(root.Right)
    if a<b{
        min=a+1
    }else{
        min=b+1
    }
    }else if root.Left!=nil{
        min=minDepth(root.Left)+1
    }else if root.Right!=nil{
        min=minDepth(root.Right)+1
    }else{
        min=1
    }
   
    return min
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值