尝试创建一个程序来查找非二叉树的高度.最终得到一个很长的循环,没有答案



C++

你好。我试图找到一棵树的高度。树可能是二进制的,也可能不是二进制的。输入格式为

  1. 节点数
  2. 每个节点的父节点

例如:5

4-1 4 1 1

预期结果:3

每个整数都是指其位置的父节点的数组位置。例如,值 0 处的值为 4,这意味着其父级是 4 处的值,其值为 1,这意味着其父级是 1 处的值,其值为 (-1(,这意味着它是树的根。

最终结果是,当 height(Nod*( 函数开始时,我的程序不知何故出现故障,尽管最后有一个清晰的 cout,但它根本没有打印任何答案。

我尝试了很多东西,但在这一点上我真的看不出出了什么问题。

#include<iostream>
#include <conio.h>
using namespace std;
class Nod
{
public: Nod* parent;
Nod* child[];
};
int height(Nod* root)
{
int i, Q, MAX=0;
if(root->child[0]==NULL)
return 1;
else
for(i=0; root->child[i]!=NULL; i++)
{
Q=height(root->child[i]+1);
if(MAX<Q)
MAX=Q;
}
return MAX;
}
int main()
{
int i, j, k, n;
Nod* root=NULL;
cin>>n;
int A[n];
for(i=0; i<n; i++)
cin>>A[i];
Nod no[n];
for(i=0; i<n; i++)
{
k=0;
if(A[i]==-1)
{
no[i].parent=NULL;
root=&no[i];
}
else
no[i].parent=&no[A[A[i]]];
for(j=0; j<n; j++)
{
if(A[j]==i)
no[i].child[k++]=&no[j];
}
no[i].child[k]=NULL;
}
int ht=height(root);
cout<<endl<<ht;
getch();
return 0;
}

你误会了 Nod[] 是什么类型的数据。它是指向 Nod 类型的指针,这意味着您需要分配它。此外,超出此类类型的范围访问不会返回 NULL,它会出现段错误。此行为以静默方式退出程序,而不显示任何退出指示。出于您的目的,我建议您研究 std::vector 而不是静态数组。其余方法看起来不错。

你应该看看 .size(( 来测试空性和 .push_back((

最新更新