【问题标题】:What's wrong with the height of the tree of my implementation?我的实现树的高度有什么问题?
【发布时间】:2021-09-08 05:39:21
【问题描述】:

我正在做一些运动

https://practice.geeksforgeeks.org/problems/height-of-binary-tree/1

这是已使用的输入格式。

我看到他们的实现有遍历的节点数而不是边数。 所以,我在我的答案中加了 1 来弥补这一点。但是,我的回答是他们的输入失败 “5 5 N 4 10 N 8 5 N 8 8 N 6”,我不明白它怎么会失败。我信心不足,想知道是否 我在这里找出树的高度做错了什么。

int result1 = 0;
int result2 = 0;
int MyHeight(Node *root)
{
   if(root->left == NULL && root->right == NULL)
   {
       return 0;
   }

   if(root->left)
   {
     //cout<<"Executing root->left = data = "<<root->data<<endl;
     result1 =  MyHeight(root->left) + 1;
     //cout<<"height -left --of .."<<root->data<<" = "<<result1<<endl;
   }
   if(root->right)
   {
     result2 = MyHeight(root->right) + 1;
     //cout<<"right.height of .."<<root->data<<" = "<<result2<<endl;
   }
   if(result1 > result2)
       return result1;
   return result2;
}

int get_Height(Node* root)
{
  // Your code here
  //cout<<"root->data"<<root->data;
  return MyHeight(root);   
}

在什么情况下,这个实现会失败? 你能在它会失败的场景中画一棵树吗? 我已经调试过了,我看不出那里出了什么问题。 这听起来像是他们拥有的无效 BST,但我想知道我的实现是否正确。我看不出它实际上是错误的。

【问题讨论】:

  • 请不要标记多种语言,只标记您实际使用的语言。
  • “5 5 N 4 10 N 8 5 N 8 8 N 6”是什么意思?完整的问题陈述需要在问题中。不仅仅是指向外部网站的链接——尤其是需要登录的网站。
  • 至于你的问题,你有没有试过debug你的程序?例如,通过在纸上绘制树,用正方形表示节点,用箭头表示指针,然后在调试器中逐步执行代码,并在论文中的程序中进行相同的修改(擦除和重绘箭头甚至框为需要)?可以帮助您了解正在发生的事情。
  • 其实,在之前使用笔和纸来编写代码对于编写没有错误(或者至少错误更少)的代码也很有帮助。并且不要在没有测试的情况下编写大量代码,一次只编写几行代码,构建(启用额外的警告,并且您将其视为必须修复的错误)然后进行测试。一旦几行构建并正常工作,您就可以编写接下来的几行。
  • 递归和全局变量不能很好地混合。向good C++ book 学习会比 geeksforgeeks 有用得多。

标签: c++ data-structures


【解决方案1】:

递归和全局变量不能很好地混合。您在每次递归调用中不断覆盖这些全局变量。

具体result2 = MyHeight(root-&gt;right) + 1;可以覆盖result1,这样就不再是root-&gt;left的高度,而是root-&gt;right-&gt;left的高度。解释递归是相当棘手的,最好把你的调试器拿出来,单步调试你的代码,看看result1result2 是如何变化的。

应始终谨慎使用全局变量,在这种情况下,根本没有理由使用全局变量,将 result1result2 设置为 MyHeight 本地应该可以解决您的问题。

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 1970-01-01
    • 2019-06-07
    • 2021-07-25
    • 2011-09-08
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    相关资源
    最近更新 更多