题目链接: 剑指 Offer 55 - II. 平衡二叉树
题目描述:
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
解法思路:
- 求出二叉树中每个节点的左右子树的高度(利用上一题的代码)
- 判断左右子树的高度差是否超过1,从而得出结果
代码:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
var res bool
func isBalanced(root *TreeNode) bool {
res = true
if root == nil {
return true
}
deep(root)
return res
}
func deep(root *TreeNode)int{
if root == nil {
return 0
}
l := deep(root.Left)
r := deep(root.Right)
if (l - r) > 1 || (r - l) > 1 {
res = false
}
return max(l,r) + 1
}
func max(a,b int)int{
if a > b {
return a
}
return b
}
闭包的形式,简化代码
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func isBalanced(root *TreeNode) bool {
res := true
var deep func(*TreeNode)int
if root == nil {
return true
}
deep = func(root *TreeNode)int{
if root == nil {
return 0
}
l := deep(root.Left)
r := deep(root.Right)
if (l - r) > 1 || (r - l) > 1 {
res = false
}
return max(l,r) + 1
}
deep(root)
return res
}
func max(a,b int)int{
if a > b {
return a
}
return b
}