2016-07-05 10 views
0

Javaのバイナリツリーソートにいくつか問題があります。 私は次のメソッドを作成する必要がありますが、私はそれをどのように正しく(pos)を実装するのか分かりません。 エクササイズは、与えられたシグネチャでバイナリツリーソートを実装することです。次に、int []を初期化する必要があります。このサイズは、ツリー内のノードのサイズ以上でなければなりません。 方法バイナリツリーSorrt Java再帰

のint binSort

位置posに、アレイ内の各ノード/リーフの値を置くべき{...}(ノードノード、[]、int型のPOSをINT)。 グローバル変数は使用できません! そして、あなたが見ることができるように、我々は順序どおりトラバーサル

public class BinaryTree { 

Node root; 
int elements; 

public BinaryTree() { 
    this.elements = 0; 
} 

public void addNode(int key, String name) { 
    Node newNode = new Node(key, name); 
    if (root == null) { 
     root = newNode; 
    } else { 
     Node focusNode = root; 
     Node parent; 

     while (true) { 
      parent = focusNode; 
      if (key < focusNode.getPriority()) { 
       focusNode = focusNode.getLeftChild(); 
       if (focusNode == null) { 
        parent.setLeftChild(newNode); 
        return; 
       } 
      } else { 
       focusNode = focusNode.getRightChild(); 
       if (focusNode == null) { 
        parent.setRightChild(newNode); 
        return; 
       } 
      } 
     } 
    } 
} 

public int binSort(Node focusNode, int[] a, int pos) { 
    int tmp = pos++; 
    if (focusNode != null) { 
     if (focusNode.getLeftChild() != null) { 
      binSort(focusNode.getLeftChild(), a, tmp); 
     } 

      System.out.println(focusNode.toString() + " - " + tmp++); 
     if (focusNode.getRightChild() != null) { 
      binSort(focusNode.getRightChild(), a, tmp); 
     } 
     return focusNode.getPriority(); 
    } 
    return -1; 
} 

public static void main(String[] args) { 
    BinaryTree tree = new BinaryTree(); 
    tree.addNode(50, "Boss"); 
    tree.addNode(30, "Boss"); 
    tree.addNode(10, "Boss"); 
    tree.addNode(70, "Boss"); 
    tree.addNode(9, "Boss"); 
    tree.addNode(15, "Boss"); 
    tree.addNode(78, "Boss"); 
    tree.addNode(36, "Boss"); 

    int[] a = new int[8]; 
    tree.binSort(tree.root, a, 0); 
    System.out.println(tree.root.getPriority()); 
    System.out.println(""); 

    System.out.println(Arrays.toString(a)); 

} 

}を実装する必要が

マイ出力: ボスはキー9つのがある - 0

- 0

ボスキー10を持っています0

0123から1つの

ボスキー30は -

ボスキー15が有します単に「ボスを無視2

- 1つの

ボスキー78持っている - 0

ボスキー70が有する - 1つの

ボスキー50が有する -の

ボスキー36が有します"これは重要ではありません。 重要な部分は、配列に配置する必要がある特定の値が完全に順序付けられていることです(9,10,15,30、..、78)が、ありません! (0,0,1,0,1,0,1,2) これを修正する方法はわかりません。

Btw。クラス "Node":

String val; 
int priority; 

Node leftChild; 
Node rightChild; 

public Node(int priority, String val) { 
    this.priority = priority; 
    this.val = val; 
} 

public int getPriority() { 
    return this.priority; 
} 

public String getVal() { 
    return this.val; 
} 

public Node getLeftChild() { 
    return leftChild; 
} 

public Node getRightChild() { 
    return rightChild; 
} 

public void setLeftChild(Node child) { 
    this.leftChild = child; 
} 

public void setRightChild(Node child) { 
    this.rightChild = child; 
} 

public String toString() { 
    return val + " has a key " + priority; 
} 

私はこの問題を解決するのに役立つことを願っています。

+0

コードをデバッグしましたか? – Thomas

+0

上記の例の正しい順序は? –

+0

位置によって、あなたはそのノードからの高さを意味しますか? –

答えて

0

okが、私は(代わりにfocusNode.getPriorityの、POSを返すために必要な

public int binSort(BinTreeNode nnode, int[] a, int pos) { 
    if (nnode != null) { 
     if (nnode.getLeftChild() != null) { 
      pos = binSort(nnode.getLeftChild(), a, pos); 
     } 
     a[pos] = nnode.getValue(); 
     pos++; 
     if (nnode.getRightChild() != null) { 
      pos = binSort(nnode.getRightChild(), a, pos); 
     } 
     return pos; 
    } 
    return -1; 
} 

:)自分で解決策を見つけた)と私は、私だけが値を追加した後、1でPOSをインクリメントする必要があります現在のノードの!