c++ - 我的实现树的高度有什么问题?
问题描述
我正在做一些运动
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,但我想知道我的实现是否正确。我看不出它实际上是错误的。
解决方案
递归和全局变量不能很好地混合。您在每个递归调用中不断覆盖这些全局变量。
具体result2 = MyHeight(root->right) + 1;
可以覆盖result1
,使其root->left
不再是 的高度,而是 的高度root->right->left
。解释递归是相当棘手的,最好把你的调试器拿出来,单步调试你的代码,看看如何result1
改变result2
。
全局变量应始终小心使用,在这种情况下,根本没有理由使用全局变量,makeresult1
和result2
local toMyHeight
应该可以解决您的问题。
推荐阅读
- chart.js - Chart.js 在 x 轴上显示我的数据集中不存在的日期
- ios - SwiftUI 中带有丰富 markdown 的文本视图(不仅仅是粗体和斜体文本)
- postgresql - 创建没有数据的表非常慢
- ios - 如何以编程方式下载 TestFlight 构建的构建元数据?
- angular - Angular 10 i18n .htaccess 重定向到子文件夹并从 URL 中删除子文件夹
- python - python中的双向条形图,如何删除所有背景颜色?
- python - Django 验证器 - 选中的复选框
- amazon-web-services - AWS Elastic Beanstalk 部署错误:InvalidParameterValue:模板没有数字的 EvaluationPeriods 设置
- database-replication - 多主复制数据库,在两个不同的主中创建相同的用户
- python - 如何检查字符串并在检查后获取字符串