【发布时间】:2018-11-24 18:30:24
【问题描述】:
我一直在编写这段代码,用于在 C# 中计算树的高度。这个问题的输入首先是:节点的数量,然后是每个节点的数量。那么输出将是树的高度。
输入
5
4 -1 4 1 1
输出 3
public long Solve(long nodeCount, long[] tree)
{
List<long>[] Node = new List<long>[nodeCount];
long root = 0;
for(int i =0;i<nodeCount;i++ )
{
Node[i] = new List<long>();
}
for(int j =0; j<nodeCount;j++)
{
if (tree[j] == -1)
root = j;
else
Node[tree[j]].Add(j);
}
Queue<long> Q = new Queue<long>();
Q.Enqueue(root);
long Height = 0;
while(Q.Any())
{
for(int i =0; i<Q.Count(); i++)
{
long nodee = Q.Dequeue();
if(Node[nodee] != null)
{
foreach(long N in Node[nodee])
{
Q.Enqueue(N);
}
}
}
Height = Height+1;
}
return Height;
}
此代码向我的测试用例返回错误结果。有什么问题?
【问题讨论】:
-
@Disaffected1070452 由于某种原因,我无法调试
-
您的 Visual Studio 是进入调试模式还是发布模式?
-
一棵树怎么可能是一个数组(long[] 树)?树不应该是根节点吗?每个节点都有一个左和右。要获得高度,您必须横穿节点并找到从根到叶的最大节点数。
-
@jdweng 这看起来像一棵扁平的树,其中每个元素的值都指向其父元素的索引。
-
只有在每个元素都有树的情况下才有效。如果一个节点只有一个孩子会怎样?
标签: c# tree binary-tree