我目前正尝试在 C# 中实现一个非常简单的树/节点类,其中节点有一个对象作为数据,并且它们可以有零到多个子节点。我目前有两个问题:
- 出于某种原因,打印出对象最终打印出 TYPE 对象的而不是它的 toString() 对于每个不是的节点 根。
- 我似乎无法正确打印出树的多个分支, 找不到问题,是否是我打印的问题 方法或我将子节点添加到节点的方式。
我的节点类如下。
namespace Tree
{
class Node
{
public object data;
private LinkedList<Node> children;
public Node(object data)
{
this.data = data;
children = new LinkedList<Node>();
}
public void Add(params object[] objects)
{
foreach (object obj in objects)
{
children.AddLast(new Node(obj));
}
}
public int Count()
{
int count = 1;
foreach (Node n in children)
{
count += n.Count();
}
return count;
}
public void Print(int depth)
{
string s = new string('\t',depth);
s += data;
Console.WriteLine(s);
depth++;
foreach (Node n in children)
{
n.Print(depth);
}
}
}
}
为了测试,我创建了一棵树,它的根有三个 child ,这三个 child 中的每一个都有另外三个 child ,如下所示。
Node core = new Node("root");
Node o1 = new Node("1");
Node o2 = new Node("2");
Node o3 = new Node("3");
o1.Add(new Node("11"), new Node("12"), new Node("13"));
o2.Add(new Node("21"), new Node("22"), new Node("23"));
o3.Add(new Node("31"), new Node("32"), new Node("33"));
core.Add(o1, o2, o3);
Console.WriteLine(core.Count());
core.Print(0);
预期输出当然是:
13
root
1
11
12
13
2
21
22
23
3
31
32
33
不幸的是我得到:
4
root
Tree.Node
Tree.Node
Tree.Node
这是我第一次在 C# 中执行递归,所以我可能缺少一些简单的东西。如果是这种情况,我宁愿让问题得到解释,而不是在代码中给我解决方案。谢谢。
最佳答案
快速修复:
public void Add(params Node[] objects)
{
foreach (Node obj in objects)
{
children.AddLast(obj);
}
}
如果您的 Add
方法应该添加子节点,那么首先您应该为 objects
参数使用相应的类型。其次,您应该删除到 Node
的额外对象转换,因为您已经传递了 Node
类型参数。
关于c# - C# 中的这个树实现有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35102621/