BST获取随机节点的路径长度

时间:2017-05-07 13:15:08

标签: java binary-search-tree

我的目标是从我的二进制搜索树中选择一个随机节点并获取其路径长度,但我似乎让自己有点迷失。我有一棵树,它随机整数填充,我能够看到每个分支的长度。但我不确定如何选择随机节点并计算其路径长度。正确方向的任何指针都是最有帮助的。

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);
    }

以上是随机数生成器以及它如何实现到main。在Pastebin Link案例中包含整个程序的pastebin,您需要更多信息。

1 个答案:

答案 0 :(得分:1)

您可以为random_index数组范围内的节点生成任何randoms,并对其执行其他操作。

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;
}