题目要求某节点的两个子节点的深度(最深深度)差是否超过1。
最开始没弄清题意,以为是求最深节点与最浅节点的差,后来仔细读题发现是求两个子节点,但为什么是对比两个子节点的最深深度,目前不是很清楚。
思路:令叶子节点的深度为1;然后一直递归至根节点。每到一个节点就对比左右子节点的最深深度,若深度差大于1,则返回-1表示已经有节点不满足,然后一直递归到根节点。
代码:
class Solution {
public:
int travel(TreeNode* node)
{
if(node==NULL)
return 0;
int l_level=travel(node->left);
int r_level=travel(node->right);
if(l_level==-1 || r_level==-1)
return -1;
if(abs(l_level-r_level)>1)
return -1;
return max(l_level,r_level)+1;
}
bool isBalanced(TreeNode* root) {
if(root==NULL)
return true;
if(travel(root)==-1)
return false;
return true;
}
};