【发布时间】: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