2016-06-01 6 views
1

私は最近、インタビューの中で、以下のJavaメンバー関数プロトタイプを使用してBSTの順序トラバーサルをコーディングするように求められました。BSTのJavaメンバー関数traversal

public void inOrderPrint() 

私は、それがどんなパラメータも取らなかったという事実によって混乱しました。私は渡されるノードに慣れています。ノードを渡してツリーをたどることは非常に簡単です...私は最初の参照がなくても、それについてどうやって行くのか少し混乱していますか? inOrderPrint()は、通過するツリーが現在のノードをルートと一つであることを示唆しています、BSTのNodeクラスで定義されている場合

+2

はおそらくインタビュアーは、ルートがサイドノートとしてクラス –

+1

の分野であると仮定:あなたはこのようにそれを行うことができますへの可能なアクセスの言及について尋ねている可能性がそのクラスのメソッド – pinkpanther

+0

関数はノードbstクラスの内部で定義されていました。私は渡すことなくトラバースする方法を確信しています。 – beepboop

答えて

2

所定の署名は理にかなっています。あるいは、ツリーが現在のクラスの属性である可能性があります。この方法は、ノードクラスであると仮定すると、それはこのようなものになるだろう - とは再帰が呼び出されるか予告実行します。それは、メンバ関数だということを考えると

public class Node { 

    private Node left; 
    private Node right; 
    private Object value; 

    public void inOrderPrint() { 
    if (left != null) 
     left.inOrderPrint(); 
    System.out.println(value); 
    if (right != null) 
     right.inOrderPrint(); 
    } 

} 
+0

これはBSTのクラスで定義されています。私はちょうどあなたがそれを書いていく方法を混同しています。 – beepboop

+0

パラメータの代わりに属性を参照し、標準のinorder traversalを実行します。何も変わりません。 –

+0

Inorderこれを行うには、再帰を使用できませんか? – beepboop

0

を、一つはあなたがアクセス権を持っていると仮定することができますルート(例:this.root)に移動します。あなたは、ノードに渡すメソッドでこのメソッドをオーバーロードすることができます。その後、ルートで指定されたメソッドの中でオーバーロードされたメソッドを呼び出します。

EDIT:

私はこの方法は、ツリー内ではなく、Nodeクラスで定義されたと思いました。 (nullをチェックしてください!)

public void inOrderPrint(){ 
    //traverse down the left tree 
    this.left.inOrderPrint(); 
    System.out.println(this); 
    //traverse down the right tree  
    this.right.inOrderPrint(); 
} 
+0

これは私がやったことですが、彼が探していた答えではありませんでした。 – beepboop

+0

@beepboop私は自分の答えを編集しました。 – eol