2017-05-07 40 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; 
}