还是一道简单题(来源于LeetCode)毕竟真的太菜了。。。
先上题:
思路如下:直接递归分别得到左右子树的高度,相减判断高度差即可,然后因为真的是菜,写了好几次都只过了33组数据,然后就看了leetcode里大佬的题解;修改后代码如下:
/**
* 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:
bool ans=true;
bool isBalanced(TreeNode* root) {
depth(root);
return ans;
}
int depth(TreeNode* root)
{
if(root==NULL)
return 0;
int left=depth(root->left);
int right=depth(root->right);
if(abs(left-right)>1) ans=false;
return max(left,right)+1;
}
};
其实修改之后一模一样 因为之前我写的求高度差是在isbalance函数里面,分别depth出root->right和root->left的高度,垃圾的我以为只是时间上会长一点,但结果是只过了33组数据。但是还是不太理解 数据结构没学好 ,所以就记下来了。错误代码如下:
/**
* 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 {
int depth(TreeNode* root)
{
if(root==NULL)
return 0;
int left=depth(root->left);
int right=depth(root->right);
return max(left,right)+1;
}
public:
bool isBalanced(TreeNode* root) {
int le=depth(root->left);
int ri=depth(root->right);
if(abs(le-ri)>1)
return false;
else return true;
}
};
希望路过的大佬指点一下, 是不是因为depth出root->right和root->left的高度根本就不是右子树和左子树的高度。。。