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;
}
私はこの問題を解決するのに役立つことを願っています。
コードをデバッグしましたか? – Thomas
上記の例の正しい順序は? –
位置によって、あなたはそのノードからの高さを意味しますか? –