NST.Chloe.
2021-05-19 17:33
采纳率: 40%
浏览 107

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

 

用其他测试用例都没问题,但传【1,null,2】就输出3,答案为2,想了好久还是觉得没问题

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • groovy2007 2021-05-20 02:15
    已采纳

    是因为用到了全局变量。同样的代码,单独测[1, null, 2]输出是对的(leetcode里面可以自己提交测试用例)。但是一正式提交就会出错,因为第一个测试用例max已经是3了。第二个测试用例会去更新同一个max,因为2<3,所以max还是3。Leetcode每个测试用例并不会重启程序,而是会在一个程序里测试所有的用例,即多次调用maxDepth。

    已采纳该答案
    1 打赏 评论
  • qfl_sdu 2021-05-19 17:46

    求深度的代码错了。修改如下:

    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();
    
    }
    打赏 评论
  • qfl_sdu 2021-05-20 17:52

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

    打赏 评论
  • 小白四十五 2021-09-01 14:47

    左右节点你算了两次

    打赏 评论

相关推荐 更多相似问题