ALGORITHM:
The first elenment is the root.All elements less than first element in the level order traversal belong to left subtree and appear in the same order as the level order traversal of left subtree.Similarly, for the right subtree.
We use recursion in a function returning the pointer to the root of the tree on passing an array containing the level order traversal .The base case is if the level order array is empty we return a NULL tree.Otherwise, we create a tree with head as the first element of the array, then we segregate all elements less than and greater than the first element in the left and right array respectively.These are the level order traversals of the left and right subtrees respectively.These are passed to the function and return the head pointers of the eft and right subtrees that are assigned to tree->left and tree-> right.
Program:
#include<iostream>
#include<vector>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
struct tree
{
int d;
struct tree* left;
struct tree* right;
};
struct tree* create_bst(int a[100],int n)
{
if(n==0)
{
return NULL;
}
struct tree* head=(struct tree*)malloc(sizeof(struct tree));
int l[100];
int r[100];
head->d=a[0];
int j=0,k=0;
for(int i=1;i<n;i++)
{
if(a[i]<a[0])
{
l[j++]=a[i];
}
else
{
r[k++]=a[i];
}
}
head->left=create_bst(l,j);
head->right=create_bst(r,k);
return head;
}
void print_in(struct tree* head)
{
if(head!=NULL)
{
print_in(head->left);
printf("%d ",head->d);
print_in(head->right);
}
}
int main()
{
struct tree*head;
int a[100];
int n;
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("hi");
head=create_bst(a,n);
printf("hi");
print_in(head);
}
Time comlexity:
Worst case:n^2
Best case:nlogn [T(n)=2T(n/2)+O(n)]
The first elenment is the root.All elements less than first element in the level order traversal belong to left subtree and appear in the same order as the level order traversal of left subtree.Similarly, for the right subtree.
We use recursion in a function returning the pointer to the root of the tree on passing an array containing the level order traversal .The base case is if the level order array is empty we return a NULL tree.Otherwise, we create a tree with head as the first element of the array, then we segregate all elements less than and greater than the first element in the left and right array respectively.These are the level order traversals of the left and right subtrees respectively.These are passed to the function and return the head pointers of the eft and right subtrees that are assigned to tree->left and tree-> right.
Program:
#include<iostream>
#include<vector>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
struct tree
{
int d;
struct tree* left;
struct tree* right;
};
struct tree* create_bst(int a[100],int n)
{
if(n==0)
{
return NULL;
}
struct tree* head=(struct tree*)malloc(sizeof(struct tree));
int l[100];
int r[100];
head->d=a[0];
int j=0,k=0;
for(int i=1;i<n;i++)
{
if(a[i]<a[0])
{
l[j++]=a[i];
}
else
{
r[k++]=a[i];
}
}
head->left=create_bst(l,j);
head->right=create_bst(r,k);
return head;
}
void print_in(struct tree* head)
{
if(head!=NULL)
{
print_in(head->left);
printf("%d ",head->d);
print_in(head->right);
}
}
int main()
{
struct tree*head;
int a[100];
int n;
cin>>n;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("hi");
head=create_bst(a,n);
printf("hi");
print_in(head);
}
Time comlexity:
Worst case:n^2
Best case:nlogn [T(n)=2T(n/2)+O(n)]