用其他测试用例都没问题,但传【1,null,2】就输出3,答案为2,想了好久还是觉得没问题
是因为用到了全局变量。同样的代码,单独测[1, null, 2]输出是对的(leetcode里面可以自己提交测试用例)。但是一正式提交就会出错,因为第一个测试用例max已经是3了。第二个测试用例会去更新同一个max,因为2<3,所以max还是3。Leetcode每个测试用例并不会重启程序,而是会在一个程序里测试所有的用例,即多次调用maxDepth。
求深度的代码错了。修改如下:
int maxDepth(struct TreeNode* root)
{
if (root == 0)
{
return 0;
}
int numLeft = 1 + maxDepth(root->left);
int nmbRight = 1+ maxDepth(root->right);
return nmbRight > numLeft ? nmbRight:numLeft;
}
测试代码如下:
#include <stdio.h>
struct TreeNode
{
int val;
struct TreeNode* left;
struct TreeNode* right;
};
int maxDepth(struct TreeNode* root)
{
if (root == 0)
{
return 0;
}
int numLeft = 1 + maxDepth(root->left);
int nmbRight = 1+ maxDepth(root->right);
return nmbRight > numLeft ? nmbRight:numLeft;
}
void main()
{
TreeNode* head = new TreeNode;
head->val = 3;
TreeNode* pleft1 = new TreeNode;
pleft1->val = 9;
TreeNode* pright1 = new TreeNode;
pright1->val = 20;
head->left = pleft1;
head->right = pright1;
pleft1->left = 0;
pleft1->right = 0;
TreeNode* p2left = new TreeNode;
p2left->val = 15;
p2left->left = 0;
p2left->right = 0;
TreeNode* p2right = new TreeNode;
p2right->val = 7;
p2right->left = 0;
p2right->right = 0;
pright1->left = p2left;
pright1->right = p2right;
int nmb = maxDepth(head);
printf("%d\n",nmb);
getchar();
getchar();
}
基本把问题原因都给你说了,白给你忙活了。。。。
左右节点你算了两次