题目链接

题目大意:判断一个二叉树是否是平衡二叉树。

法一: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     }
View Code

相关文章: