2017-05-07 5 views
0

내 목표는 내 이진 검색 트리 내에서 임의의 노드를 선택하고 경로 길이를 얻는 것입니다. 나는 나무를 가지고 있고, 그것은 무작위 정수로 채워져 있고, 나는 각 가지의 길이를 볼 수있다. 하지만 임의의 노드를 선택하고 경로 길이를 계산하는 방법을 모르겠습니다. 올바른 방향의 포인터가 가장 도움이됩니다.임의의 노드의 경로 길이를 얻는 BST

public static int[] generateRandomNumbers(int size) { 
    if (size < 0) { 
     throw new IllegalArgumentException("size must be greater than less than 0"); 
    } 
    Random random = new Random(); 
    int[] results = new int[size]; 
    for (int i = 0; i < size; i++) { 
     results[i] = random.nextInt(size); 
    } 
    return results; 
} 

public static void main(String[] args) { 
    BST bst = new BST(); 
    int[] randoms = generateRandomNumbers(100); 
    for (int i : randoms) { 
     bst.insert(i); 
    } 

위의 내용은 난수 생성기와 그 기본 구현 방법입니다. Pastebin Link 경우에는 전체 프로그램의 pastebin을 포함하여 더 많은 정보가 필요합니다.

+0

스택 오버 플로우에 오신 것을 환영합니다! 디버깅 도움을 요청하는 질문 ("이 코드가 작동하지 않는 이유는 무엇입니까?")에는 원하는 동작, _a 특정 문제 또는 error_ 및 _ 그 자체를 재현하는 데 필요한 _ 최단 코드 **가 포함되어야합니다. 분명한 문제 성명이없는 질문은 다른 독자에게 유용하지 않습니다. 참조 : [최소한의 완전하고 검증 가능한 예제를 만드는 방법] (http://stackoverflow.com/help/mcve). –

+0

어떤 부분이 혼란 스럽습니까? 찾아야 할 임의의 노드를 선택하거나 임의로 선택한 노드의 경로 길이를 찾으십니까? 아니면 둘다? –

+0

노드를 선택하면 경로 길이가 반환되므로 해결되었습니다. – JimmyPop13

답변

1

randoms 배열의 노드에 대해 random_index을 생성하고 다른 작업을 수행 할 수 있습니다.

Random random = new Random(); 

int random_index= random.nextInt(randoms.length); 

int random_node_data = randoms[random_index]; 

//Do other stuff with random_node 

편집 : 루트에서 노드의 경로를 찾기위한

, 당신은 StringBuilder에 노드를 찾는 동안 트랙을 저장 작성하고 필요한 노드가 발견되면 그것을 반환 할 수 있습니다. 그러나 여기서는 기존 노드에서 생성 된 임의의 노드를 찾고 있으므로 필요한 노드가 BST에 없을 가능성은 없습니다.

static StringBuilder findPath (Node root , int data_to_be_found) 
{ 
    StringBuilder path = new StringBuilder(); 

    if(root==null) 
     return path; 

    Node current_node = root; 

    while(current_node != null) 
    { 
     if(path.size() > 0) 
      path.append(" -> "); 

     path.append(current_node.data); 

     if(current_node.data == data_to_be_found) 
      return path; 

     if(data_to_be_found > current_node.data) 
      current_node = current_node.right; 
     else 
      current_node = current_node.left; 

    } 

    return path; 
}