Balanced Binary Tree -- LeetCode

                原题链接:  http://oj.leetcode.com/problems/balanced-binary-tree/  
这道题是树操作的题目,还是老套路用递归。这道题是求解树是否平衡,还是有一些小技巧的。要判断树是否平衡,根据题目的定义,深度是比需的信息,所以我们必须维护深度,另一方面我们又要返回是否为平衡树,那么对于左右子树深度差的判断也是必要的。这里我们用一个整数来做返回值,而0或者正数用来表示树的深度,而-1则用来比较此树已经不平衡了,如果已经不平衡,则递归一直返回-1即可,也没有继续比较的必要了,否则就利用返回的深度信息看看左右子树是不是违反平衡条件,如果违反返回-1,否则返回左右子树深度大的加一作为自己的深度即可。算法的时间是一次树的遍历O(n),空间是栈高度O(logn)。代码如下: 
public boolean isBalanced(TreeNode root){    return helper(root)>=0;}private int helper(TreeNode root){    if(root == null)        return 0;    int left = helper(root.left);    int right = helper(root.right);    if(left<0 || right<0)        return -1;    if(Math.abs(left-right)>=2)        return -1;    return Math.max(left,right)+1;}
可以看出树的题目万变不离其宗,都是递归遍历,只是处理上保存量,递归条件和结束条件会有一些变化。
           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值