Leetcode100. 平衡二叉树Balanced Binary Tree(Java)
##Tree##, ##Depth-first Search##, ##Recursion##
平衡二叉树,判断一棵树是否为平衡二叉树
平衡二叉树的每个结点的左右两个子树的高度差的绝对值不超过1
- 递归遍历所有结点,每个结点的左右两颗子树都应该是平衡二叉树
- 每个结点的左右两棵子树的高度差绝对值不超过1
设计DFS函数时,要返回int
高度和boolean
是否为平衡二叉树两个类型不同的变量
可将boolean
是否为平衡二叉树设置全局变量,因为只要存在一个结点不满足平衡二叉树的要求,则整棵树都不满足平衡二叉树要求
**时间复杂度:**O(n)
class Solution {
boolean rea = true;
public boolean isBalanced(TreeNode root) {
dfs(root);
return rea;
}
public int dfs(TreeNode root) {
if (root == null) return 0;
int l = dfs(root.left);
int r = dfs(root.right);
if (Math.abs(l - r) > 1) rea = false;
return Math.max(l, r) + 1;
}
}