标签:
这题还是简单的二叉树递归遍历相关的基础。
首先题目要求判断给出的是否平衡二叉树,而平衡二叉树又是左、右子树的高度差值小于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; } } };
标签:
原文地址:http://www.cnblogs.com/alexandra523/p/5271110.html