C++
你好。我试图找到一棵树的高度。树可能是二进制的,也可能不是二进制的。输入格式为
- 节点数
- 每个节点的父节点
例如: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((