public class BalancedBinaryTree { //方法一:先序遍历 public boolean isBalanced1(TreeNode root) { if(root==null) return true; return Math.abs(height(root.left)-height(root.right))<=1 &&isBalanced(root.left) &&isBalanced(root.right); } //方法二:后序遍历 public boolean isBalanced(TreeNode root) { return balancedHeight(root)>-1; } //定义一个直接判断当前树是否平衡的方法,也返回高度 public int balancedHeight(TreeNode root){ if(root==null) return 0; //递归计算左右子树高度 int leftHeight = balancedHeight(root.left); int rightHeight = balancedHeight(root.right); //如果子树不平衡,直接返回-1 if(leftHeight==-1||rightHeight==-1||Math.abs(leftHeight-rightHeight)>1){ return -1; } //如果平衡 返回当前高度 return Math.max(leftHeight,rightHeight)+1; } //定义一个计算树的高度的方法 public 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) { TreeNode node1 = new TreeNode(3); TreeNode node2 = new TreeNode(9); TreeNode node3 = new TreeNode(20); TreeNode node4 = new TreeNode(15); TreeNode node5 = new TreeNode(7); TreeNode node6 = new TreeNode(17); node1.left = node2; node1.right = node3; node3.left=node4; node3.right=node5; // node5.right = node6; BalancedBinaryTree balancedBinaryTree = new BalancedBinaryTree(); System.out.println(balancedBinaryTree.isBalanced(node1)); } }