【问题标题】:c# - Simple Binary Treec# - 简单的二叉树
【发布时间】:2013-07-30 14:59:37
【问题描述】:

所以,过去一个月我一直在学习 C#,目前我正在努力学习二叉树。

我的问题是如何将我的树调用到控制台窗口? 我试过 Console.WriteLine(tree.Data); 但这似乎将 54 写入我的控制台窗口。

如果您需要查看,这是我的代码:

主文件

static void Main(string[] args)
{
    //Creating the Nodes for the Tree
    Node<int> tree = new Node<int>('6');
    tree.Left = new Node<int>('2');
    tree.Right = new Node<int>('5');  

    Console.WriteLine("Binary Tree Display");
    Console.WriteLine(tree.Data);
    Console.ReadLine();
}

节点类

class Node<T> where T : IComparable
{
    private T data;
    public Node<T> Left, Right;

    public Node(T item)
    {
        data = item;
        Left = null;
        Right = null;
    }
    public T Data
    {
        set { data = value; }
        get { return data; }
    }
}

还有其他调用我的树的方法吗?还是我做错了什么?

【问题讨论】:

标签: c# binary-tree


【解决方案1】:

之所以只显示54,是因为这就是(int)'6'

您正在调用tree.Data,在这种情况下会返回'6' 转换为int


我想你想要做的是要么返回6,你可以使用

new Node<char>('6'); 

或通过

new Node<int>(6);

(More in separate answer, removed for clarity)

【讨论】:

【解决方案2】:
Node<int> tree = new Node<int>(6);

6,而不是“6”。现在将打印预期值。您的代码默默地将 char 值 '6' 转换为整数,结果为 54。

【讨论】:

    【解决方案3】:

    (Moved from previous answer for clarity)

    如果您尝试返回 Node&lt;T&gt; 的所有数据,我认为更好的方法是覆盖 ToString 类中的 ToString 方法,如下所示:

    public override string ToString()
    {
        var leftString = this.Left != null ? this.Left.ToString() : "null";
        var rightString = this.Right != null ? this.Right.ToString() : "null";
        var dataString = this.Data != null ? this.Data.ToString() : "null";
    
        leftString = String.Join("\n", leftString.Split('\n').Select(a => "\t" + a));
        rightString = String.Join("\n", rightString.Split('\n').Select(a => "\t" + a));
    
        return String.Format("\nData: {0}\n"
                            + "Left: {1}\n"
                            + "Right: {2}",
                            dataString, leftString, rightString);
    }
    

    然后调用Console.WriteLine(tree.ToString());,结果如下:

    Data: 54
    Left:   
      Data: 50
      Left:   null
      Right:   null
    Right:   
      Data: 53
      Left:   null
      Right:   null
    

    这不是最漂亮的实现,但我认为证明了这一点。

    有关更漂亮的实现,请参阅this answer

    【讨论】:

      【解决方案4】:

      我相信最好的方法是实现一个简洁的递归树遍历算法,该算法以您选择遇到它们的特定顺序打印出每个节点的值。至于在 C# 库中是否有预先编写的方法,我不知道。祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-08
        • 1970-01-01
        • 2021-09-08
        相关资源
        最近更新 更多