题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树。
解题思路:为了防止重复计算树的深度,我这里选用从叶子节点依次向上判断,当前节点左右节点符合条件则返回深度值,不符合条件返回-1;
/** * @author 枫叶火火 */ public class Solution { public boolean IsBalanced_Solution(TreeNode root) { if(root == null){ return true; } return IsBalanced(root) != -1; } //从下往上计算左右子树是否符合条件,不符合条件返回-1,符合返回当前最大深度值 private int IsBalanced(TreeNode node){ if(node == null){ return 0; } //左子树深度判断 int left = IsBalanced(node.left); if(left == -1){ return -1; } //右子树深度判断 int right = IsBalanced(node.right); if(right == -1){ return -1; } //判断当前左右子树是否符合条件 if(Math.abs(left - right) > 1){ return -1; } //返回当前最大深度 return Math.max(left, right)+1; } }