C Program of Trees
C Program of Trees
#include<stdio.h>
#include<malloc.h>
struct node{
int data;
};
int main(){
/*
p->data = 2;
p->left = NULL;
p->right = NULL;
p->data = 1;
p1->left = NULL;
p1->right = NULL;
p->data = 4;
p2->left = NULL;
p2->right = NULL;
*/
p->left = p1;
p->right = p2;
return 0;
#include<stdio.h>
#include<malloc.h>
struct node{
int data;
};
if(root!=NULL){
preOrder(root->left);
preOrder(root->right);
int main(){
// 4
// /\
// 1 6
// / \
// 5 2
p->left = p1;
p->right = p2;
p1->left = p3;
p1->right = p4;
preOrder(p);
return 0;
}
#include<malloc.h>
struct node{
int data;
};
if(root!=NULL){
preOrder(root->left);
preOrder(root->right);
if(root!=NULL){
postOrder(root->left);
postOrder(root->right);
}
}
int main(){
// 4
// /\
// 1 6
// / \
// 5 2
p->left = p1;
p->right = p2;
p1->left = p3;
p1->right = p4;
preOrder(p);
printf("\n");
postOrder(p);
return 0;
@ IN-ORDER TRAVERSAL
#include<stdio.h>
#include<malloc.h>
struct node{
int data;
};
if(root!=NULL){
preOrder(root->left);
preOrder(root->right);
if(root!=NULL){
postOrder(root->left);
postOrder(root->right);
if(root!=NULL){
inOrder(root->left);
inOrder(root->right);
}
int main(){
// 4
// /\
// 1 6
// / \
// 5 2
p->left = p1;
p->right = p2;
p1->left = p3;
p1->right = p4;
// preOrder(p);
// printf("\n");
// postOrder(p);
// printf("\n");
inOrder(p);
return 0;
#include<stdio.h>
#include<malloc.h>
struct node{
int data;
struct node* left;
};
if(root!=NULL){
preOrder(root->left);
preOrder(root->right);
if(root!=NULL){
postOrder(root->left);
postOrder(root->right);
if(root!=NULL){
inOrder(root->left);
inOrder(root->right);
}
}
if(root!=NULL);
if(!isBST(root->left)){
return 0;
return 0;
prev = root;
return isBST(root->right);
else{
return 1;
int main(){
// 5
// /\
// 3 6
// / \
// 1 4
// Linking the root node with left and right children
p->left = p1;
p->right = p2;
p1->left = p3;
p1->right = p4;
// preOrder(p);
// printf("\n");
// postOrder(p);
// printf("\n");
inOrder(p);
printf("\n");
// printf("%d", isBST(p));
if(isBST(p)){
printf("This is a bst" );
else{
return 0;
#include<malloc.h>
struct node{
int data;
};
if(root!=NULL){
preOrder(root->left);
preOrder(root->right);
if(root!=NULL){
postOrder(root->left);
postOrder(root->right);
if(root!=NULL){
inOrder(root->left);
inOrder(root->right);
if(root!=NULL){
if(!isBST(root->left)){
return 0;
return 0;
prev = root;
return isBST(root->right);
else{
return 1;
if(root==NULL){
return NULL;
if(key==root->data){
return root;
else if(key<root->data){
else{
int main(){
// 5
// /\
// 3 6
// / \
// 1 4
p->left = p1;
p->right = p2;
p1->left = p3;
p1->right = p4;
if(n!=NULL){
else{
return 0;
#include<malloc.h>
struct node{
int data;
};
if(root!=NULL){
preOrder(root->left);
preOrder(root->right);
if(root!=NULL){
postOrder(root->left);
postOrder(root->right);
if(root!=NULL){
inOrder(root->left);
inOrder(root->right);
}
int isBST(struct node* root){
if(root!=NULL){
if(!isBST(root->left)){
return 0;
return 0;
prev = root;
return isBST(root->right);
else{
return 1;
while(root!=NULL){
if(key == root->data){
return root;
else if(key<root->data){
root = root->left;
else{
root = root->right;
return NULL;
int main(){
// Constructing the root node - Using Function (Recommended)
// 5
// /\
// 3 6
// / \
// 1 4
p->left = p1;
p->right = p2;
p1->left = p3;
p1->right = p4;
if(n!=NULL){
else{
return 0;
#include<malloc.h>
struct node{
int data;
};
if(root!=NULL){
preOrder(root->left);
preOrder(root->right);
if(root!=NULL){
postOrder(root->left);
postOrder(root->right);
if(root!=NULL){
inOrder(root->left);
if(root!=NULL){
if(!isBST(root->left)){
return 0;
return 0;
prev = root;
return isBST(root->right);
else{
return 1;
while(root!=NULL){
if(key == root->data){
return root;
else if(key<root->data){
root = root->left;
else{
root = root->right;
}
return NULL;
while(root!=NULL){
prev = root;
if(key==root->data){
return;
else if(key<root->data){
root = root->left;
else{
root = root->right;
if(key<prev->data){
prev->left = new;
else{
prev->right = new;
int main(){
// 5
// /\
// 3 6
// / \
// 1 4
p->left = p1;
p->right = p2;
p1->left = p3;
p1->right = p4;
insert(p, 16);
printf("%d", p->right->right->data);
return 0;
@DELETION CODE
#include<stdio.h>
#include<malloc.h>
struct node{
int data;
};
if(root!=NULL){
preOrder(root->left);
preOrder(root->right);
if(root!=NULL){
postOrder(root->left);
postOrder(root->right);
if(root!=NULL){
inOrder(root->left);
inOrder(root->right);
if(root!=NULL){
if(!isBST(root->left)){
return 0;
return 0;
prev = root;
return isBST(root->right);
else{
return 1;
while(root!=NULL){
if(key == root->data){
return root;
else if(key<root->data){
root = root->left;
else{
root = root->right;
return NULL;
while(root!=NULL){
prev = root;
if(key==root->data){
printf("Cannot insert %d, already in BST", key);
return;
else if(key<root->data){
root = root->left;
else{
root = root->right;
if(key<prev->data){
prev->left = new;
else{
prev->right = new;
root = root->left;
while (root->right!=NULL)
root = root->right;
return root;
if (root == NULL){
return NULL;
}
if (root->left==NULL&&root->right==NULL){
free(root);
return NULL;
else{
iPre = inOrderPredecessor(root);
root->data = iPre->data;
return root;
int main(){
// 5
// /\
// 3 6
// / \
// 1 4
p->left = p1;
p->right = p2;
p1->left = p3;
p1->right = p4;
inOrder(p);
printf("\n");
deleteNode(p, 3);
inOrder(p);
return 0;
#include <stdlib.h>
struct Node
int key;
int height;
};
if(n==NULL)
return 0;
return n->height;
node->key = key;
node->left = NULL;
node->right = NULL;
node->height = 1;
return node;
return (a>b)?a:b;
if(n==NULL){
return 0;
x->right = y;
y->left = T2;
return x;
y->left = x;
x->right = T2;
if (node == NULL)
return createNode(key);
int bf = getBalanceFactor(node);
return rightRotate(node);
return leftRotate(node);
node->left = leftRotate(node->left);
return rightRotate(node);
node->right = rightRotate(node->right);
return leftRotate(node);
return node;
}
void preOrder(struct Node *root)
if(root != NULL)
preOrder(root->left);
preOrder(root->right);
int main(){
preOrder(root);
return 0;