2016-04-14 192 views
0

我想輸出二進制搜索樹給定一個數組值。它遵循二進制搜索樹原理。該圖旋轉到左側。
這是所需的輸出:

輸出二進制搜索樹陣列

    <6 
      <5 
     4< 
3<   
      <2 
     1< 

但它輸出這樣
enter image description here

如何解決呢?

//class Node 
class Node { 
    int value; 
    Node left; 
    Node right; 

    Node(int x) { 
     value = x; 
    } 
} 

//class BST 
public class BST { 
    static int value[] = {3,4,5,6,1,2}; 
    public static Node root; 

    public static Node insert(int num[], int start, int end) { 
     if (start > end) 
      return null; 

     int mid = (start + end)/2; 
     Node roots = new Node(value[mid]); 
     roots.left = insert(value, start, mid - 1); 
     roots.right = insert(value, mid + 1, end); 

     display(roots, 0); 
     return roots; 
    } 

    public static void display(Node node, int level){ 
     if(node!=null){ 
      display(node.right, level+1); 
      System.out.println(""); 
      if(node==root) 
       System.out.print("Root-> "); 
      for(int i=0;i<level&&node!=root;i++) 
       System.out.print("    "); 
      System.out.print(node.value+"< "); 
      display(node.left, level+1); 
     } 
    } 

    public static void main(String args[]){ 
     insert(value, 0, 5); 
    } 
} 
+0

你不正確地插入值,你最終的樹是不是BST(1在左節點數量更多,但3具有更大的節點在右邊)。 如果你想插入工作,你的數組必須已經排序。 如果你想保持你的值數組未被排序,你需要在插入過程中做旋轉,你應該期待wikipedia或者rosetta代碼以獲得更多信息 – Guillaume

+0

我編輯了我的代碼,你是對的,我必須對它進行排序!我會找到一個關於如何排序的算法。謝謝! – Meryel

+0

使用BST最有趣的部分是知道如何插入隨機值,而不是排序值。在你的情況下,使用排序數組插入值是微不足道的,但你應該嘗試以隨機方式插入值。 – Guillaume

回答

0

與數組排序工作代碼:

public class BST { 
    static int value[] = {1,2,3,4,5,6}; 
    public static Node root; 

    public static Node insert(int[] num) { 
     if (num.length == 0) 
       return null; 

     return insert(num, 0, num.length - 1); 
    } 

    public static Node insert(int num[], int start, int end) { 
     if (start > end) 
      return null; 

     int mid = (start + end)/2; 
     Node roots = new Node(value[mid]); 
     roots.left = insert(value, start, mid - 1); 
     roots.right = insert(value, mid + 1, end); 

     return roots; 
    } 

    public static void display(Node node, int level){ 
     if(node!=null){ 
      display(node.right, level+1); 
      System.out.println(""); 
      if(node==root) 
       System.out.print("Root-> "); 
      for(int i=0;i<level&&node!=root;i++) 
       System.out.print("    "); 
      System.out.print(node.value+"< "); 
      display(node.left, level+1); 
     } 
    } 

    public static void main(String args[]){ 
     display(insert(value), 0); 
    } 
}