2012-05-06 7 views
0

これは自分のデータ構造クラスの宿題であり、Javaのものです。バイナリ検索ツリーのノードをJavaの配列で表示する必要があります。それ、どうやったら出来るの?

私はこの小さなゲームを並べ替える必要があります。世界はグラフで構成され、いくつかのノードは見つかったときにバイナリ検索ツリーであるユーザーのインベントリに追加されるアイテムを保持します。 (バイナリ検索ツリーでなければなりませんが、これははるかに簡単です)。私はそのほとんどを理解しましたが、ユーザがインベントリツリーの内容を見てアクセスできるようにする必要があります。私が提供しているバイナリツリーノードクラスは、すべてを印刷するために再帰を使用するinorderPrint()メソッドを持っていますが、それらは内容を表示するのに役立ち、簡単な方法でアクセスすることはできません。私は

int i = 0; 
int choice; 
System.out.println("# - Item\tPoints"); //Will appear as # - Item  Points 
for (BTNode node : inventory.treeAsArray()) { 
    System.out.printf("%d - %s\t%d\n", i, node.getData().getName(), 
         node.getData().getPoints()); //example: 1 - Poo 100 
    i++; 
} 

System.out.println("Select the number of the item you want to remove: "); 
choice = keyboard.nextInt(); 

...私がメインで、このような何かを行うことができますので、バイナリ検索ツリー・ノードの配列を返すメソッドを持つようにしたい。そして、私はもう一度、配列をループをいただきたいと対応項目を削除しますユーザーが入力した番号と比較します。私はどのように私はバイナリ検索ツリーの内容を配列の形で返すメソッドを書くことができるのか分かりません。それが私の主な問題です。私は実際に教科書にそのアルゴリズムを見つけることができません。

+2

ツリーを作成するか、配列を作成します。ツリーを繰り返し、要素を順番に追加します。 –

+0

通常、ツリーの配列表現はヒープです。 –

答えて

1

これを行う場合、おそらくすべてのノードに配列を渡します。

public ArrayList<BTNode> treeAsArray() { 
    ArrayList<BTNode> list = new ArrayList<BTNode>(); 
    root.buildListInorder(list); 
    return list; 
} 

、その後はあなたが適切なチェックを追加する必要があります

private void buildListInorder(ArrayList<BTNode> list) { 
    buildListInorder(this.left); 
    list.add(this); 
    buildListInorder(this.right); 
} 

を持っているが、それは必要なコードの基本的な概要です。

0
public List<BTNode> treeAsArray() { 
    return treeAsArray(this.root, new ArrayList<BTNode>()); 
} 

private List<BTNode> treeAsArray(BTNode root, List<BTNode> array) { 
    if (root == null) 
     return array; 

    treeAsArray(root->getLeftNode(), array); 
    array.add(root); 
    treeAsArray(root->getRightNode(), array); 

    return array; 
} 
関連する問題