Fix TreeRandomNode Algorithm (#3174)

Co-authored-by: Yang Libin <contact@yanglibin.info>
This commit is contained in:
Ankush Banik 2022-07-03 15:19:32 +05:30 committed by GitHub
parent b0f21803d1
commit 8b8e98e89a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,3 +1,6 @@
package com.thealgorithms.datastructures.trees;
/* Author : Suraj Kumar /* Author : Suraj Kumar
Github : https://github.com/skmodi649 Github : https://github.com/skmodi649
*/ */
@ -11,7 +14,7 @@
Step 2: First create a binary tree using the steps mentioned in the first approach Step 2: First create a binary tree using the steps mentioned in the first approach
Step 3: Now use a method inOrder() that takes a node as input parameter to traverse through the Step 3: Now use a method inOrder() that takes a node as input parameter to traverse through the
binary tree in inorder fashion as also store the values in a ArrayList simultaneously. binary tree in inorder fashion as also store the values in a ArrayList simultaneously.
Step 4: Now define a method getrandom() that takes a node as input parameter, in this first call Step 4: Now define a method getRandom() that takes a node as input parameter, in this first call
the inOrder() method to store the values in the arraylist, then find the size of the binary tree and now just generate a random number between 0 to n-1. the inOrder() method to store the values in the arraylist, then find the size of the binary tree and now just generate a random number between 0 to n-1.
Step 5: After generating the number display the value of the ArrayList at the generated index Step 5: After generating the number display the value of the ArrayList at the generated index
Step 6: STOP Step 6: STOP
@ -21,17 +24,17 @@
import java.util.ArrayList; import java.util.ArrayList;
// Using auxiliary array to find the random node in a given binary tree // Using auxiliary array to find the random node in a given binary tree
class Node {
int item;
Node left, right;
public Node(int key) {
item = key;
left = right = null;
}
}
public class TreeRandomNode { public class TreeRandomNode {
private class Node {
int item;
Node left, right;
public Node(int key) {
item = key;
left = right = null;
}
}
// Using an arraylist to store the inorder traversal of the given binary tree // Using an arraylist to store the inorder traversal of the given binary tree
static ArrayList<Integer> list = new ArrayList<>(); static ArrayList<Integer> list = new ArrayList<>();
@ -44,8 +47,9 @@ public class TreeRandomNode {
// Now lets find the inorder traversal of the given binary tree // Now lets find the inorder traversal of the given binary tree
static void inOrder(Node node) { static void inOrder(Node node) {
if (node == null) if (node == null) {
return; return;
}
// traverse the left child // traverse the left child
inOrder(node.left); inOrder(node.left);
@ -55,15 +59,14 @@ public class TreeRandomNode {
inOrder(node.right); inOrder(node.right);
} }
public void getrandom(Node val) public void getRandom(Node val) {
{
inOrder(val); inOrder(val);
// getting the count of node of the binary tree // getting the count of node of the binary tree
int n = list.size(); int n = list.size();
int min = 0; int min = 0;
int max = n - 1; int max = n - 1;
//Generate random int value from 0 to n-1 //Generate random int value from 0 to n-1
int b = (int)(Math.random()*(max-min+1)+min); int b = (int) (Math.random() * (max - min + 1) + min);
// displaying the value at the generated index // displaying the value at the generated index
int random = list.get(b); int random = list.get(b);
System.out.println("Random Node : " + random); System.out.println("Random Node : " + random);
@ -90,4 +93,3 @@ public class TreeRandomNode {
/* Time Complexity : O(n) /* Time Complexity : O(n)
Auxiliary Space Complexity : O(1) Auxiliary Space Complexity : O(1)
*/ */