java 判断二叉树是否平衡二叉树_leetcode-110:判断平衡二叉树 Java

Balanced Binary Tree

Given a binary tree, determine if it is height-balanced.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.

解法1:

1.计算每个节点的高度

2.从根节点开始从上往下遍历,判断每个节点的左右子树是否是平衡的

缺点:每次遍历都要重新计算高度,很多节点的高度都重复计算了,时间复杂度o(n^2)

解法2:

从根节点开始,从上往下遍历,按照中序遍历的思想,从左右子节点向根节点遍历,一依次判断平衡状态,这样根结点可以重复利用已经计算的子节点的高度,只需要依次遍历整棵树。在遇到某个子树非平衡时,能直接结束,返回false。

/**

* Definition for a binary tree node.

* public class TreeNode {

* int val;

* TreeNode left;

* TreeNode right;

* TreeNode(int x) { val = x; }

* }

*/

import java.math.*;

public class Solution {

public boolean isBalanced(TreeNode root) {

if(root == null)

return true;

int leftH = getHeight(root.left);

int rightH = getHeight(root.right);

int diff = leftH - rightH;

if(diff>1 || diff

return false;

}else{

return isBalanced(root.left) && isBalanced(root.right);

}

}

int getHeight(TreeNode root){

if(root == null){

return 0;

}

return 1+Math.max(getHeight(root.left),getHeight(root.right));

}

/**

public boolean isBalanced(TreeNode root) {

if(root == null)

return true;

if(getHeight(root) == -1){

return false;

}else{

return true;

}

}

public int getHeight(TreeNode root){

if(root == null)

return 0;

int leftH = getHeight(root.left);

if(leftH == -1)

return -1;

int rightH = getHeight(root.right);

if(rightH == -1)

return -1;

if(leftH-rightH > 1 || leftH-rightH < -1)

return -1;

return 1+(leftH>rightH?leftH:rightH);

}

*/

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值