【发布时间】:2016-01-30 13:54:56
【问题描述】:
我目前正在尝试在 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);
}
}
}
}
为了测试,我正在创建一棵树,它的根有三个孩子,然后这三个孩子中的每一个都有另外三个孩子,如下所示。
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# 中进行递归,所以也许我缺少一些简单的东西。如果是这种情况,我宁愿解释问题,也不愿在代码中给出解决方案。谢谢。
【问题讨论】:
-
您还需要在
Count()上进行递归 -
Count() 已经有递归,因为它调用了子节点的 Count()
-
您应该考虑将树类简化为:
public class Node<T> : List<Node<T>> { public T Data { get; set; } }。 -
或
public class Node<T> : LinkedList<Node<T>> { public T Data { get; set; } }。 -
public class Node<T> : LinkedList<Node<T>>我想我以前没有遇到过这个符号,我的意思是逗号。