判断是否是平衡二叉树
0.题目
平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
提示:
- 树中的节点数在范围 [0, 5000] 内
- -10^4 <= Node.val <= 10^4
1.DFS
1.1 分析
主要思路:判断是否是高度平衡二叉树,可以转换为比较节点左右子树的高度差;所以可以借鉴前面“计算二叉树最大深度”的思路。
- 采用深度优先遍历的方式,自底向上计算节点的高度差;
- 比较某节点的子树高度差,如果差值的绝对值小于2则返回该节点的高度;
- 如果差值的绝对值大于2则表明是平衡的二叉树,需要结束;以返回-1未标记值;
注意:迭代过程中,如果左右子树的高度返回-1则表明迭代结束;
1.2 代码 1ms 38.6mb
public boolean isBalanced(TreeNode root) {
return dfs(root) != -1;
}
int dfs(TreeNode root) {
if (root == null) return 0;
int left = dfs(root.left);
if (left == -1) return -1;
int right = dfs(root.right);
if (right == -1) return -1;
if (Math.abs(left-right) < 2) {
return Math.max(left, right) +1;
} else {
return -1;
}
}