Amazon Interview Question
SDE1sCountry: United States
1. Insert middle of array as root.
2. recurse left getting middle of left section, after setting array size to start to middle-1(from step 1).
3. recurse right after setting array to middle+1 to end.
node *bstree::createTree(int arr[], int start, int end){
if(start > end)
return NULL;
int middle = (start + end)/2;
node *root = createRoot(arr[middle]);
root-> left = createTree(arr, start, middle-1);
root-> right = createTree(arr, middle+1, end);
return root;
}
Working code ::
class Node{
Node left, right;
int data;
Node(int data1){
this.data = data1;
left = null;
right = null;
}
}
public class sortedArrayToBinaryTree {
public Node convert(int[] arr, int start, int end){
if(start > end) {
return null;
}
int mid = (start+end)/2;
Node root = new Node(arr[mid]);
root.left = convert(arr, start, mid-1);
root.right = convert(arr, mid+1, end);
return root;
}
public void display(Node root){
if(root != null) {
display(root.left);
System.out.println(root.data);
display(root.right);
}
}
public static void main(String[] args){
sortedArrayToBinaryTree s = new sortedArrayToBinaryTree();
int[] arr = {1,2,3,4,5,6,7,8,9,10};
Node n = s.convert(arr, 0 , arr.length-1);
System.out.println("Display Tree");
s.display(n);
}
}
public TreeNode toBST(int[] arr){
return toBSTHelper(arr, 0, arr.length - 1);
}
public TreeNode toBSTHelper(int[] arr, int low, int high){
if(low > high)
return null;
int middle = (low + high)/2;
TreeNode root = new TreeNode(arr[middle]);
root.left = toBSTHelper(arr, low, middle-1);
root.right = toBSTHelper(arr, middle+1, high);
return root;
}
- hyo May 02, 2018