7

所以,在过去的一个月里,我一直在学习 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; }
    }
}

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

4

4 回答 4

8

它只是显示的原因54是因为那是什么(int)'6'

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


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

new Node<char>('6'); 

或通过

new Node<int>(6);

更多在单独的答案中,为清楚起见已删除

于 2013-07-30T15:04:19.347 回答
2
Node<int> tree = new Node<int>(6);

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

于 2013-07-30T15:04:24.910 回答
2

为了清楚起见,从以前的答案移开

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

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

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

对于更漂亮的实现,请参阅此答案

于 2013-07-30T15:27:19.030 回答
0

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

于 2013-07-30T15:03:59.723 回答