题目:
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
解答:
思路:
思路是构造一个获取当前子树的深度的函数 dfs(root) ,通过比较某子树的左右子树的深度差 Math.abs(left-right)>1是否成立,来判断某子树是否是二叉平衡树。若所有子树都平衡,则此树平衡。
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
boolean flag=true;
public boolean isBalanced(TreeNode root) {
dfs(root);
return flag;
}
public int dfs(TreeNode node){
if(node==null) return 0;
int left=dfs(node.left)+1;
int right=dfs(node.right)+1;
if(Math.abs(left-right)>1) flag=false;
return Math.max(left,right);
}
}