力扣一个简单题求二叉树的深度,想知道我的代码错在哪儿

 

用其他测试用例都没问题,但传【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();

}

 

基本把问题原因都给你说了,白给你忙活了。。。。

左右节点你算了两次