码迷,mamicode.com
首页 > 其他好文 > 详细

110. Balanced Binary Tree

时间:2016-03-13 06:13:23      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:

  这题还是简单的二叉树递归遍历相关的基础。

  首先题目要求判断给出的是否平衡二叉树,而平衡二叉树又是左、右子树的高度差值小于1。所以我们判断前,先要知道左、右子树的高度值,所以我们要另外添加一个函数去遍历。

  前面的思路还是很简单,但是被一个地方坑到。这就是在求出左、右子树高度值的函数里面,两者高度值相差大于1并不意味着false,因为这只是一个求左、右子树高度的函数而不是判断是否平衡二叉树的函数。所以我们要用另外的表达来说明这种状态,而不是直接认为是false。这点需要好好注意啊! 其实我不确定这种理解对不对,但是我在这行命令:

if(leftdepth < 0 || rightdepth < 0 || abs(leftdepth - rightdepth) > 1) return -1;里面原本return 0 改成 -1 刚好通过了,如果不是这样理解的话请大家指点一下,谢谢:)
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int calculatedepth(TreeNode* root)
    {
        if(!root) return 0;
        int leftdepth = calculatedepth(root -> left);
        int rightdepth = calculatedepth(root -> right);
        if(leftdepth < 0 || rightdepth < 0 || abs(leftdepth - rightdepth) > 1) return -1;
        else return((leftdepth > rightdepth) ? leftdepth : rightdepth) + 1;

    }
    
    bool isBalanced(TreeNode* root) {
        if(!root) return true;
        else
        {
            int ldepth = calculatedepth(root -> left);
            int rdepth = calculatedepth(root -> right);
            if(ldepth < 0 || rdepth < 0 || abs(ldepth - rdepth) > 1) return false;
            else return true;
        }
        
    }
};

 

110. Balanced Binary Tree

标签:

原文地址:http://www.cnblogs.com/alexandra523/p/5271110.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!