2016-04-14 18 views
0

Bir değer dizisi verilen ikili arama ağacını çıkarmak istiyorum. İkili arama ağacı ilkesini izler. Diyagram sola döndürülür.
budur istenen çıkışı:

İkili Arama Ağacı Dizisi Çıktısı

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

Ama ben bunu nasıl düzeltirim bu
enter image description here

gibi çıktılar? Sıralanmış dizisi ile

//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

Doğru değerini sokmayın, son ağaç BST (1 sol düğüm daha büyük numarası vardır değil, ama 3 büyük düğüm vardır sağda). Eklenecek parçanın çalışmasını istiyorsanız, dizininiz zaten dizilmiş olmalıdır. Değer dizininizi sıralamada tutmak istiyorsanız, ekleme sırasında döndürme yapmanız gerekir, daha fazla bilgi için wikipedia veya rosetta kodunu aramalısınız – Guillaume

+0

Kodumu düzenledim ve haklısınız, onu sıralamalıyım! Bunu nasıl sıralayacağımı bir algo bulurum. Teşekkürler! – Meryel

+0

Bir BST kullanmanın en ilgi çekici kısmı, değerlerin değil, rastgele değerlerin nasıl ekleneceğini bilmek. Sizin durumunuzda, sıralanmış bir diziyi kullanarak değerleri eklemek önemsizdi, ancak değerleri rastgele bir şekilde eklemeyi denemelisiniz. – Guillaume

cevap

0

Çalışma kodu:

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