c#-简单二叉树

c#-简单二叉树,c#,binary-tree,C#,Binary Tree,所以,在过去的一个月里,我一直在学习C#,而现在我正在努力学习二叉树 我的问题是,如何才能将我的树调用到控制台窗口? 我试过Console.WriteLine(tree.Data)但这似乎会将54写入我的控制台窗口 如果您需要查看,请查看我的代码: 主文件 static void Main(string[] args) { //Creating the Nodes for the Tree Node<int> tree = new Node<int>('6

所以,在过去的一个月里,我一直在学习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();
}
static void Main(字符串[]args)
{
//为树创建节点
节点树=新节点('6');
tree.Left=新节点('2');
tree.Right=新节点('5');
Console.WriteLine(“二叉树显示”);
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; }
    }
}
类节点,其中T:IComparable
{
私有T数据;
公共节点左、右;
公共节点(T项)
{
数据=项目;
左=空;
右=空;
}
公共T数据
{
设置{data=value;}
获取{返回数据;}
}
}

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

我认为最好的方法是实现一个简洁的递归树遍历算法,它按照您选择遇到的特定顺序打印出每个节点的值。至于在C#Library中有一种预先编写的方法来实现这一点,我不知道。祝你好运

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

您正在调用
tree.Data
,它在本例中返回
'6'
转换为
int


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

new Node<char>('6'); 
新节点('6');
或者

new Node<int>(6);
新节点(6);

()

节点树=新节点(6);
6,而不是“6”。现在将打印期望值。您的代码以静默方式将字符值“6”强制转换为整数,结果为54。

()

如果您试图返回
节点的所有数据
我认为更好的方法是重写
节点
类中的
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
这并不是最漂亮的实现,但我认为证明了这一点


要获得更漂亮的实现,请参见

[待续..]听起来更好:)@lazyberezovsky:更令人激动!为了澄清下面的答案,您正在转换通过使用带撇号的文字
'6'
创建的
char
类型。
char
类型被隐式转换为等效的
int
值,其中整数值“54”表示字符
6
。看见
Data: 54
Left:   
  Data: 50
  Left:   null
  Right:   null
Right:   
  Data: 53
  Left:   null
  Right:   null