题目大意:判断一个二叉树是否是平衡二叉树。
法一:dfs。利用求解二叉树的高度延伸,先计算左子树的高度,再计算右子树的高度,然后两者进行比较。o(nlgn)。代码如下(耗时4ms):
1 public boolean isBalanced(TreeNode root) { 2 if(root == null) { 3 return true; 4 } 5 //计算左子树高度 6 int l = dfs(root.left); 7 //计算右子树高度 8 int r = dfs(root.right); 9 //比较左子树和右子树高度 10 if(Math.abs(l - r) > 1) { 11 return false; 12 } 13 //如果左右子树有非平衡二叉树,则整体就是平衡二叉树,否则就不是 14 return isBalanced(root.left) && isBalanced(root.right); 15 } 16 //计算二叉树的高度 17 private int dfs(TreeNode root) { 18 if(root == null) { 19 return 0; 20 } 21 int l = dfs(root.left); 22 int r = dfs(root.right); 23 return (l > r) ? (l + 1) : (r + 1); 24 }