2016-10-01 3 views
1

私は順序どおりの方法を使用して、このバイナリツリーの要素を印刷するとき、それは印刷します。ここでは0 0 0 0 0 0バイナリツリープリントアウトすべてゼロの

は私のコードは次のとおりです。

public class BST { 

class Node { 

    int data; 
    Node left; 
    Node right; 

    public Node(int data) { 
    data = data; 
    left = null; 
    right = null; 
} 

public Node root; 

/** 
* Method to insert a new node in order 
* in our binary search tree 
*/ 
public void insert(int data) { 
    root = insert(root, data); 
} 

public Node insert(Node node, int data){ 

if(node==null){ 
    node = new Node(data); 
}else if (data < node.data){ 
    node.left = insert(node.left, data); 
}else{ 
    node.right = insert(node.right, data); 
} 
return node; 
} 

/** 
    Prints the node values in the "inorder" order. 
*/ 
    public void inOrder() { 
    inOrder(root); 
} 

    private void inOrder(Node node) { 
    if (node == null) 
    return; 

    inOrder(node.left()); 
    System.out.print(node.data + " "); 
    inOrder(node.right); 
    } 
} 

メインをクラス:

public class Main { 

public static void main(String[] args) { 

    BST tree = new BST(); 

    tree.insert(6); 
    tree.insert(4); 
    tree.insert(8); 
    tree.insert(2); 
    tree.insert(1); 
    tree.insert(5); 

    tree.inOrder(); 

} 
} 

私の挿入方法で何かが間違っていると感じましたが、何が分かりません。正しい方向への助けがあれば偉大なものになるでしょう。

答えて

1

クラスNodeでは、コンストラクタが、クラス変数を初期化する代わりに、コンストラクタ引数を自分自身に設定しています。

コンストラクタの引数とクラス変数と区別するために、キーワードにthisというキーワードを使用してください。

例:

public class Pair 
{ 

    private int left; 
    private int right; 

    public Pair(int left, int right) { 
    // the following 2 lines don't do anything 
    // it set's the argument "left = left" which is silly... 

    left = left; 
    right = right; 

    // with the `this` keyword we can correctly initialize our class properties 
    // and avoid name collision 

    this.left = left; 
    this.right = right; 
    } 

} 
+0

ありがとうございました!これはうまくいった! – Cody

+0

@CodyReandeauそれを聞いてうれしい:) – souldzin

関連する問題