c# - C# 中的这个树实现有什么问题?

标签 c# tree nodes

我目前正尝试在 C# 中实现一个非常简单的树/节点类,其中节点有一个对象作为数据,并且它们可以有零到多个子节点。我目前有两个问题:

  1. 出于某种原因,打印出对象最终打印出 TYPE 对象的而不是它的 toString() 对于每个不是的节点 根。
  2. 我似乎无法正确打印出树的多个分支, 找不到问题,是否是我打印的问题 方法或我将子节点添加到节点的方式。

我的节点类如下。

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/

相关文章:

c# - C#中 'abstract override'有什么用?

c++ - O(1) 时间内平衡二进制搜索时间中的最小/最大元素

Java 将元素附加到 XML 文档

algorithm - 在 Scala 中更新节点的值?

javascript - While 循环,节点和 parentNode 未到达末尾

java - 如何列出无向图中从一个节点到另一个节点的所有路径?

c# - 如何从 VB6 访问 SQL CE 3.5

c# - 比较两个xml文件并显示差异

c# - 不可点击的上下文菜单标题

ruby - 树到数组算法(Ruby)