2017-08-13 13 views
-1

静的ルート値と2つの子ノードを持つ静的バイナリツリーのデータ構造を作成しようとしました。私は任意の数の子の値に対して動的にしようとしています。どのように私は静的ルートノードでそれを行うことができます。 myArray = {3,11,8,18,21,36,1}とすると、私はどのように実装できますか?複雑なコードを変更したシンプルなコードは役に立ちます。静的ルートノードを持つC#バイナリツリーデータ構造

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

どのような種類のバイナリツリーが必要ですか? –

+0

フルバイナリツリー – Kurkula

+0

フルバイナリツリーには、すべてのノードが0または2つの子を持つ条件が1つだけあります。つまり、現在のノードの子孫ノードがどの値に属するかは関係ありませんが、このif(myArray [i]> rootNode.value) 'を投稿します。だから完全なバイナリツリーが必要だが、完全なバイナリツリーを探していると確信していますか? –

答えて

1

このコードは動作していますが、必要に応じてさらに改善することができます。申し訳ありませんが、少し長くしなければなりませんでした。コードを理解していただければ幸いです。それは難しくありません。コードは途中でJavaにあります。構文を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; 

} 
関連する問題