2016-09-12 17 views
1

私は最近C++からJavaに移行しましたが、現在はC++でポインタの使用が必要なデータ構造を使っています。Java BST再帰

私は今JavaでBSTを作成していますが、私はinsertingをTreeに再帰しましたが、期待通りの動作をしていません。このコードは、Nodeval = 5のみを格納します。何かアドバイスをいただけますか?

public class Main 
{ 
    public static void main(String [] args) 
    { 
     BST<Integer> bst = new BST<Integer>(); 
     bst . add(5); 
     bst . add(10); 
    } 
} 

public class BST<T extends Number & Comparable<T>> 
{ 
    private Node root; 

    private class Node 
    { 
     private T val; 
     private Node left; 
     private Node right; 

     Node(T val) 
     { 
     this . val = val; 
     left = null; 
     right = null; 
     } 
    } 


    public BST() 
    { 
     root = null; 
    } 

    public BST(T val) 
    { 
     root = new Node(val); 
    } 

    public void add(T val) 
    { 
     if(root == null) 
     root = new Node(val); 
     else 
     add(root, val); 
    } 

    private void add(Node parent, T val) 
    { 
     if(parent == null) 
     parent = new Node(val); 
     else if(val . compareTo(parent . val) < 0) 
     add(parent . left, val); 
     else if(val . compareTo(parent . val) > 0) 
     add(parent . right, val); 
    } 
} 

ありがとうございます。

答えて

1

Javaは参照渡しであるため、parent = new Node(val)は何も成就しません。単にローカルパラメータを変更するだけです。

if (left == null) left = new Node(val) else add (left,val)のようにする必要があります。

これは宿題に関する質問である可能性が高いため、コードを投稿していません。

+0

オウキー、私があなたの言ったことをして、今働いています、ありがとう。しかし、Javaが参照渡しであれば、 'parent = new Node(val)'は動作しませんか?それ以前の 'parent'のアドレスは' null'だったので、 'parent'のアドレスは' new Node(val) 'でなければなりません。 – scarface

+0

@scarface - 'parent'への参照は**ローカル**変数です。それを変更しても構造は変わりません。 – OldCurmudgeon

+0

私は混乱しています。 – scarface