2017-05-07 79 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

欢迎来到Stack Overflow!寻求调试帮助的问题(“为什么这个代码不工作?”)必须在问题本身中包含所需的行为,特定的问题或错误以及必要的最短代码**。没有明确问题陈述的问题对其他读者无益。请参阅:[如何创建最小,完整和可验证示例](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; 
}