package com.camnter.basicexercises.tree;
import com.camnter.basicexercises.core.TreeNode;
/**
* 判断平衡二叉树(递归)
*
* 空树也是平衡树。
* 左子树和右子树的高度差绝对值不超过 1
* 左子树和右子树也是平衡的
*
* @author CaMnter
*/
public class IsBalancedTreeRecursive {
public boolean isBalancedTreeRecursive(TreeNode root) {
if (root == null) return true;
int diff = Math.abs(height(root.left) - height(root.right));
return diff < 2 && isBalancedTreeRecursive(root.left) && isBalancedTreeRecursive(root.right);
}
private int height(TreeNode root) {
if (root == null) return 0;
return Math.max(height(root.left), height(root.right)) + 1;
}
public static void main(String[] args) {
IsBalancedTreeRecursive isBalancedTreeRecursive = new IsBalancedTreeRecursive();
System.out.println(isBalancedTreeRecursive.isBalancedTreeRecursive(TreeNode.getTree()));
System.out.println(isBalancedTreeRecursive.isBalancedTreeRecursive(TreeNode.getUnBalancedTree()));
}
}