力扣链接:
https://leetcode-cn.com/probl...
解题思路:
- 平衡二叉树的定义:二叉树每个节点的左右两个子树的高度差的绝对值不超过 1
- 求二叉树的路径或者活深度的时候,使用的是前序遍历,而求高度的时候,使用的是后序遍历
- 递归求解三部曲:(1)确定参数:传入的参数就是节点,初始化就是根节点 (2)结束条件,当root == nil时返回的就是true (3)单层递归条件:后序遍历,先遍历左子树,再遍历右子树,最后处理根节点
// 使用递归的办法,求出左右子树,判断左右子树是否是平衡二叉树
func isBalanced(root *TreeNode) bool {
if root == nil {
return true
}
// 分别递归判断左右子树是不是平衡二叉树
if !isBalanced(root.Left) || !isBalanced(root.Right) {
return false
}
leftHigh := maxDepth(root.Left) + 1
rightHign := maxDepth(root.Right) + 1
if abs(leftHigh, rightHign) > 1 {
return false
}
return true
}
func maxDepth(node *TreeNode) int {
if node == nil {
return 0
}
left := maxDepth(node.Left)
right := maxDepth(node.Right)
return max(left, right) + 1
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func abs(x, y int) int {
r := x - y
if r < 0 {
return -1 * r
}
return r
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。