2017-08-13 2 views
-1

J'ai essayé de créer une structure de données pour un arbre binaire statique avec une valeur racine statique et 2 nœuds enfants. J'essaie de le rendre dynamique pour n'importe quel nombre de valeurs d'enfant. Comment puis-je faire cela avec un nœud racine statique. Comment puis-je implémenter si je prends myArray = {3,11,8,18,21,36,1}. Tout code simple avec des modifications de code complexes aiderait.Structure de données d'arbre binaire C# avec nœud racine statique

class Program 
{ 
    static void Main(string[] args) 
    { 
     TreeNode rootNode = new TreeNode(); 
     rootNode.value = 9; 

     int[] myArray = { 3, 11 }; 

     for (int i = 0; i < myArray.Length; i++) 
     { 
      if (myArray[i] > rootNode.value) 
      { 
       //add to right node 
       TreeNode right = new TreeNode(); 
       right.value = myArray[i]; 
       rootNode.rightNode = right; 

      } 
      else 
      { 
       //add to left node 
       TreeNode left = new TreeNode(); 
       left.value = myArray[i]; 
       rootNode.leftNode = left; 
      } 
     } 
    } 
} 

class TreeNode 
{ 
    public int value { get; set; } 
    public TreeNode leftNode { get; set; } 
    public TreeNode rightNode { get; set; } 

} 
+0

Quel type d'arbre binaire voulez-vous? –

+0

un arbre binaire complet – Kurkula

+0

L'arbre binaire complet a une seule condition que tous les nœuds aient 0 ou 2 enfants. Cela signifie que les valeurs des nœuds enfants descendants du nœud courant n'ont pas d'importance, mais vous publiez this si (myArray [i]> rootNode.value) '. Donc êtes-vous sûr que vous voulez un arbre binaire complet mais un arbre binaire complet? –

Répondre

1

Hey ce code est en cours d'exécution, mais vous pouvez l'améliorer si vous le souhaitez. Désolé mais j'ai dû faire un peu long. J'espère que vous comprenez le code. Ce n'est pas difficile. Le code est en Java en passant. Changez simplement la syntaxe en C#.

class Program 
{ 
    static void Main(string[] args) 
    { 
     Scanner a = new Scanner(System.in); 
     System.out.println("Enter the number of childs!"); 
     int input = a.nextInt(); 
     TreeNode rootNode = new TreeNode(); 
     TreeNode parent = rootNode; 
     rootNode.value = 9; 

     parent.childNodes = new TreeNode[input]; 
     for(int i = 0; i< input; i++){ 
      parent.childNodes[i] = new TreeNode(); 
      parent.childNodes[i].value = 0; 
     } 
     parent.hasChild = true; 
     int count = 1; 
     int startingIndex = 0; 
     int EndingIndex = input - 1; 
     int next = 0; 

     int[] myArray = { 19, 11, 12, 13 ,14, 15 }; 

     for (int i = 0; i < myArray.length; i++) 
     { 
      if(count <= input){ 
       if (myArray[i] > parent.value) 
       { 
        //add to right node 
        parent.childNodes[EndingIndex].value = myArray[i]; 
        EndingIndex--; 
        count++; 
       } 

       else 
       { 
        //add to the left node 
        parent.childNodes[startingIndex].value = myArray[i]; 

        startingIndex++; 
        count++; 
       } 
      } 
      else{ 
       parent = parent.childNodes[next]; 
       parent.childNodes = new TreeNode[input]; 
       for(int j = 0; j< input; j++){ 
        parent.childNodes[j] = new TreeNode(); 
        parent.childNodes[j].value = 0; 
       } 
       parent.hasChild = true; 
       next++; 
       count = 1; 
       i--; 
       startingIndex = 0; 
       EndingIndex = input - 1; 
       next = 0; 
      } 

     } 

     parent = rootNode; 
     TreeNode grandparent = parent; 
     System.out.println("root Node: " + parent.value); 
     next = 0; 
     int childs = 1; 
     while(parent.hasChild == true){ 
      for(int i=0; i<input; i++){ 

       if(parent.childNodes[i].value != 0){ 
        System.out.print("child " + childs + " : "); 
        childs++; 
        System.out.print(parent.childNodes[i].value); 
        System.out.println(); 
       } 
      } 
      childs = 1; 
      System.out.println(); 
      parent = grandparent.childNodes[next]; 
      next++; 
     } 
    } 
} 

class TreeNode 
{ 
    public int value; 
    TreeNode[] childNodes; 
    boolean hasChild = false; 

}