2016-09-12 6 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

오우키, 나는 네가 한 말대로 했어. 지금 일하고있어, 고마워. 그러나 자바가 참조에 의한 것이라면'parent = new Node (val)'이 작동하지 않아야합니까? 이전에'parent'의 주소는'null' 이었으므로 이제'parent'의 주소는'new Node (val)'이어야합니다. – scarface

+0

@scarface - 'parent'에 대한 참조는 ** local ** 변수입니다. 그것을 변경하면 구조가 변경되지 않습니다. – OldCurmudgeon

+0

나는 혼란 스럽다. – scarface