2013-07-30 69 views
6

Vì vậy, tôi đã học C# trong tháng vừa qua và tại thời điểm tôi đang đấu tranh với cây nhị phân.C# - Cây nhị phân đơn giản

Câu hỏi của tôi là Làm sao tôi có thể gọi cây của mình đến Cửa sổ Bảng điều khiển? Tôi đã thử Console.WriteLine(tree.Data); Nhưng điều này dường như viết 54 vào cửa sổ Console của tôi.

Đây là mã của tôi nếu bạn cần phải kiểm tra xem nó ra:

tập tin Main

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(); 
} 

Node Lớp

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ó bất kỳ phương pháp khác gọi Tree của tôi? hay tôi đang làm gì sai?

+0

Chỉ cần làm rõ các câu trả lời dưới đây, bạn đang chuyển đổi một 'kiểu char' mà bạn đã tạo bằng cách sử dụng các literal '' 6'' với dấu nháy.Kiểu 'char' đang được chuyển đổi hoàn toàn thành giá trị' int' tương đương, trong đó giá trị số nguyên "54" đại diện cho ký tự '6'. Xem http://msdn.microsoft.com/en-us/library/x9h8tsay%28v=vs.110%29.aspx –

Trả lời

7

Lý do tại sao nó chỉ hiển thị 54 là bởi vì đó là những gì (int)'6' là!

Bạn đang gọi số tree.Data trả về trong trường hợp này là '6' truyền tới int.


Tôi tưởng tượng những gì bạn đang cố gắng để làm được một trong hai trở 6 mà bạn có thể làm bằng cách sử dụng

new Node<char>('6'); 

hoặc bằng

new Node<int>(6); 

(More in separate answer, removed for clarity)

+1

[để được tiếp tục ..] âm thanh tốt hơn :) –

+1

@lazyberezovsky: [Cách khác ...] (http://www.youtube.com/watch?v=iwbsx6LvnfY&t=0m51s) thậm chí còn ly kỳ hơn nữa! –

0

Tôi tin rằng cách tốt nhất để thực hiện điều này là triển khai thuật toán truyền tải cây đệ quy ngắn gọn để in giá trị của mỗi nút theo thứ tự cụ thể mà bạn chọn gặp phải. Đối với việc có một phương pháp được viết sẵn để làm như vậy trong thư viện C#, tôi không biết về nó. May mắn nhất!

2
Node<int> tree = new Node<int>(6); 

6 và không được '6'. Giá trị mong đợi sẽ được in. mã của bạn được âm thầm phôi giá trị char '6' để nguyên, mang đến cho kết quả 54.

2

(Moved from previous answer for clarity)

Nếu bạn đang cố gắng để trả lại tất cả các dữ liệu cho Node<T> của bạn tôi nghĩ rằng một cách tốt hơn để đi về nó sẽ được ghi đè lên các phương pháp ToString trong lớp Node<T> bạn như vậy:

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); 
} 

sau đó gọi Console.WriteLine(tree.ToString()); mà kết quả trong những điều sau đây:

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

Đây không phải là triển khai đẹp nhất nhưng tôi nghĩ là đã chứng minh vấn đề.

Đối với việc thực hiện đẹp hơn thấy this answer