题目描述
我的思路:
构建depth()函数,先分别求左子树和右子树的深度,再判断当(左子树深度-右子树深度)<=1时,返回TRUE,否则返回FALSE。
思路的缺陷:
没有考虑到树的遍历。如果直接按照上述方法计算深度,只能计算根节点的情况,比如下面的例子... 其实遍历的思想很基础,但是基础知识太差经验不多所以很容易忽略最基础的思维。
不是平衡二叉树。但是不遍历的话会判断这棵树也是balance的。
最后思路:
先序遍历结合一开始的思想来做。
class Solution {
public:
bool isBalanced(TreeNode* root) {
if (root==NULL){ return true;}
int left_dep = depth(root->left);
int right_dep = depth(root->right);
if(abs(left_dep - right_dep)<=1 && isBalanced(root->left) && isBalanced(root->right)){
return true;
}
else return false;
}
int depth (TreeNode* root){
if (root==NULL){ return 0;}
return max(depth(root->left), depth(root->right)) +1;
}
};