2014-12-24 73 views
0

我需要通過鍵盤獲取節點的值並按順序顯示樹。 我嘗試將節點值保留在數組中,然後將值分配給數組元素中的每個節點。 接下來,將樹輸出到控制檯。從鍵盤填充樹並在控制檯中輸出

當手動創建樹時,一切正常。 通過數組賦值不起作用。

class Tree 
     { 
      class Node 
      { 
       public Node left; 
       public Node right; 
       public int value; 
       public Node(Node left, Node right, int value) 
       { 
        this.left = left; 
        this.right = right; 
        this.value = value; 
       } 
      } 

      private Node _root; 
      public Tree() 
      { 
       _root = null; 
      } 

      public void Add(int value) 
      { 
       _add(ref _root, value); 
      } 

      private void _add(ref Node node, int value) 
      { 
       if (node == null) 
       { 
        node = new Node(null, null, value); 
       } 
       else 
       { 
        if (node.value >= value) 
        { 
         _add(ref node.left, value); 
        } 
        else 
        { 
         _add(ref node.right, value); 
        } 
       } 
      } 

      public void Print() 
      { 
       _print(_root); 
      } 

      private void _print(Node node) 
      { 
       if (node == null) return; 
       _print(node.left); 
       Console.WriteLine(node.value); 
       _print(node.right); 
      } 

     } 

} 

使用的程序:

static void Main(string[] args) 
    { 
     Tree t = new Tree(); 


     int n = 6; 
     int[] strs = new int[n]; 
     for (int i = 0; i < n; i++) 
     { 
      strs[i] = Console.Read(); 
     } 
     for (int i = 0; i < n; i++) 
     { 
      t.Add(strs[i]); 
     } 
     t.Print(); 

沒有循環工作原理:

static void Main(string[] args) 
    { 
     Tree t = new Tree(); 

      t.Add(1); 
      t.Add(2); 
      t.Add(6); 
      t.Add(17); 
      t.Add(21); 
      t.Add(3); 
      t.Add(8); 

     t.Print(); 
    } 
+0

你應該在你從控制檯添加到陣列什麼注意。 – yesenin

回答

0

我找到了答案。 只是需要將字符串轉換成int:

static void Main(string[] args) 
    { 
     Tree t = new Tree(); 

     int n = 6; 
     int[] strs = new int[n]; 
     for (int i = 0; i < n; i++) 
     { 
      strs[i] = Convert.ToInt32(Console.ReadLine()); 
     } 
     for (int i = 0; i < n; i++) 
     { 
      t.Add(strs[i]); 
     } 

     t.Print(); 

    }