leetcode 110. Balanced Binary Tree

257 篇文章 17 订阅

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。

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.

Below is a representation of the tree input: {1,2,2,3,3,3,3,4,4,4,4,4,4,#,#,5,5}:这棵树满足定义,是一个平衡二叉树。

        ____1____
       /         \
      2           2
     /  \        / \
    3    3      3   3
   /\    /\    /\
  4  4  4  4  4  4 
 /\
5  5

还算简单的一个问题。

boolean isBalanced=true;
public boolean isBalanced(TreeNode root) {
	if(root==null){
		return true;
	}
	helper(root);
	return isBalanced;
}

//返回左右子树的高度
public int[] helper(TreeNode node){
	if(node.left==null&&node.right==null){
		return new int[]{0,0};
	}
	int left=0;
	int right=0;
	if(node.left!=null){
		//左子树的高度等于 1+以左结点为根的左右子树的最大高度
		int[] subLeft=helper(node.left);
		left=1+Math.max(subLeft[0], subLeft[1]);
	}
	if(node.right!=null){
		int[] subRight=helper(node.right);
		right=1+Math.max(subRight[0], subRight[1]);
	}
	if(Math.abs(left-right)>1){
		isBalanced=false;
	}
	return new int[]{left,right};
}
大神思路类似,但是解法更加简洁哦。

private static final int UNBALANCED = -99;

public boolean isBalanced(TreeNode root) {
    if (root == null) {
        return true;
    }
    return getHeight(root) != UNBALANCED;
}

private int getHeight(TreeNode root) {
    if (root == null) {
        return -1;
    }
    int l = getHeight(root.left);
    int r = getHeight(root.right);
    if (l == UNBALANCED || r == UNBALANCED || Math.abs(l-r) > 1) {
        return UNBALANCED;
    }
    return 1 + Math.max(l,r);
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值