110. Balanced Binary Tree

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

  首先题目要求判断给出的是否平衡二叉树,而平衡二叉树又是左、右子树的高度差值小于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;
        }
        
    }
};

 

posted @ 2016-03-13 01:27  aaaaax  阅读(180)  评论(0)    收藏  举报