Answered! Please respond the correct questions. Explicitly I want answers fro c, d, e !!!…

Please respond the correct questions. Explicitly I want answers fro c, d, e !!!

1. BST, 40 pts The purpose of this questions is to observe the behavior of binary search trees When adding random integers. You have already given a code for binary search tree (see zip file BST) a Add the function insert (int id) to the BST class. b Add a function height(Node x) to the BST class. This function will compute the height of a tree rooted at Node x. c Add a function function search Next (int k) to the BST class that find smallest id that is greater than k in the BST d et n denote the number of nodes Construct binary search trees for n 10, n 100, n 500, n 1000, n 2000, n 5000, n 10000 n 100000, n 1million. For each n you will pick uniformly random keys in the range 31 2 31 1 For each n repeat the experiment several time and calculate the average height of the tree for each n e Compare the average height to loga (n 1) 1 for each n. Calculate constants that relate the average height to log2(n 1) 1 for each n Is there any relationship betweens constants for each nHere is my code for a and b !

package BST;

public class BinarySearchTree {
public static Node root;

public BinarySearchTree() { // Constructor
this.root = null;
}

public boolean search(int id) {
Node current = root;
while (current != null) {
if (current.key == id) {
return true;
} else if (current.key > id) {
current = current.left;
} else {
current = current.right;
}
}
return false;
}

/** The insert method was added
*
* @param id integer.
*/
public void insert(int id) {

Node newNode = new Node(id);

if (root == null) {

root = newNode;

return;

}

Node current = root;

Node parent = null;

while (true) {

parent = current;

if (id < current.key) {

current = current.left;

if (current == null) {

parent.left = newNode;

return;

}

} else {

current = current.right;

if (current == null) {

parent.right = newNode;

return;

}

}

}

}

private int HeightUtil(Node root) {

if (root == null)

return -1;

else

return 1 + Math.max(HeightUtil(root.left), HeightUtil(root.right));

}

public double height() { // Compute the height of Binary Search

return HeightUtil(root);

}

public void InorderTraversal() {

inOrderHelper(root);

}

private void inOrderHelper(Node root) {

if (root != null) {

inOrderHelper(root.left);

System.out.print(root.key + ” “);

inOrderHelper(root.right);

}

}

public static void main(String arg[]) {

Integer[] a = { 1, 5, 2, 7, 4 };

BinarySearchTree bst = new BinarySearchTree();

for (Integer n : a)

bst.insert(n);

bst.InorderTraversal();

}

}

Another Node class

package BST;
public class Node{
int key;
Node left;
Node right;

public Node(int data){
key = data;
left = null;
right = null;
}
}

Expert Answer

 Here is the answer for the question. Please do not forget to rate the answer if it helped. Thank you very much.

part c

package BST;

public class BinarySearchTree {

public static Node root;

public BinarySearchTree() { // Constructor

this.root = null;

}

public boolean search(int id) {

Node current = root;

while (current != null) {

if (current.key == id) {

return true;

} else if (current.key > id) {

current = current.left;

} else {

current = current.right;

}

}

return false;

}

/** The insert method was added

*

* @param id integer.

*/

public void insert(int id) {

Node newNode = new Node(id);

if (root == null) {

root = newNode;

return;

}

Node current = root;

Node parent = null;

while (true) {

parent = current;

if (id < current.key) {

current = current.left;

if (current == null) {

parent.left = newNode;

return;

}

} else {

current = current.right;

if (current == null) {

parent.right = newNode;

return;

}

}

}

}

private int HeightUtil(Node root) {

if (root == null)

return -1;

else

return 1 + Math.max(HeightUtil(root.left), HeightUtil(root.right));

}

public double height() { // Compute the height of Binary Search

return HeightUtil(root);

}

public void InorderTraversal() {

inOrderHelper(root);

}

private void inOrderHelper(Node root) {

if (root != null) {

inOrderHelper(root.left);

System.out.print(root.key + ” “);

inOrderHelper(root.right);

}

}

 

public Integer search_Next(Integer k)

{

if(root == null)

return null;

else

{

Node current = root;

while(current != null)

{

if(current.key == k) //found a matching key

{

//now go to the left most node in the right subtree

if(current.right == null) //there is right subtree?

return null;

else

{

current = current.right;

while(current.left != null) //no more left node?

{

current = current.left;

}

return current.key;

}

}

else if(k < current.key)

current = current.left;

else

current = current.right;

}

return null;//if no matching key was found

}

}

 

public static void main(String arg[]) {

Integer[] a = { 1, 5, 2, 7, 4 };

BinarySearchTree bst = new BinarySearchTree();

for (Integer n : a)

bst.insert(n);

bst.InorderTraversal();

System.out.println(“nsearch_Next(2) = “+bst.search_Next(2));

}

}

output

1 2 4 5 7

search_Next(2) = 4

part D

package BST;

import java.util.Random;

public class CompareHeights {

private static void generateAndCompare(int nodeSize)

{

Random numRandom=new Random();

Random signRandom = new Random();

BinarySearchTree bst = new BinarySearchTree();

int num,sign;

 

System.out.println(“Generating tree with “+nodeSize +” nodes”);

for(int i = 0; i < nodeSize; i++)

{

sign = signRandom.nextInt(2);

 

num = numRandom.nextInt(Integer.MAX_VALUE);

 

if(sign == 0)//whenever sign is 0 , make the number -ve

num = -num;

 

bst.insert(num);

}

System.out.println(“Generated tree , its height is “+bst.height());

 

double h = Math.log(nodeSize + 1 ) / Math.log(2); //calculating log base 2

System.out.println(“Expected minimum height of tree is log (” + (nodeSize+1) + “) = ” + h);

System.out.println(“—————“);

 

}

public static void main(String[] args) {

int n[] = {10, 100, 500, 1000, 2000, 5000, 10000, 100000, 1000000};

for(int i = 0; i<n.length; i++)

{

generateAndCompare(n[i]);

}

}

}

output

Generating tree with 10 nodes

Generated tree , its height is 6.0

Expected minimum height of tree is log (11) = 3.4594316186372978

—————

Generating tree with 100 nodes

Generated tree , its height is 13.0

Expected minimum height of tree is log (101) = 6.6582114827517955

—————

Generating tree with 500 nodes

Generated tree , its height is 20.0

Expected minimum height of tree is log (501) = 8.968666793195208

—————

Generating tree with 1000 nodes

Generated tree , its height is 19.0

Expected minimum height of tree is log (1001) = 9.967226258835993

—————

Generating tree with 2000 nodes

Generated tree , its height is 24.0

Expected minimum height of tree is log (2001) = 10.966505451905741

—————

Generating tree with 5000 nodes

Generated tree , its height is 30.0

Expected minimum height of tree is log (5001) = 12.288000889707574

—————

Generating tree with 10000 nodes

Generated tree , its height is 30.0

Expected minimum height of tree is log (10001) = 13.287856641840545

—————

Generating tree with 100000 nodes

Generated tree , its height is 39.0

Expected minimum height of tree is log (100001) = 16.60965490131509

—————

Generating tree with 1000000 nodes

Generated tree , its height is 47.0

Expected minimum height of tree is log (1000001) = 19.931570012018494

—————

part E

The minimum height of a BST with n nodes is log (n+1). So we see from the output above that the height of generated tree is atleast as much as log(n+1)

Still stressed from student homework?
Get quality assistance from academic writers!