题目:平衡二叉树
题目描述:
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过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
}