Skip to content

Instantly share code, notes, and snippets.

@jitsceait
Last active August 29, 2015 14:00
Show Gist options
  • Select an option

  • Save jitsceait/8d37c6f19c64be04eeb2 to your computer and use it in GitHub Desktop.

Select an option

Save jitsceait/8d37c6f19c64be04eeb2 to your computer and use it in GitHub Desktop.
Program to get inorder predecessor
#include<stdio.h>
#include<stdlib.h>
struct node{
int value;
struct node *left;
struct node *right;
};
typedef struct node Node;
Node * find_maximum(Node *root){
if(!root)
return NULL;
while(root->right){
root = root->right;
}
return root;
}
Node *inorder_preced(Node *root, int K){
Node * predecessor = NULL;
Node *current = root;
if(!root)
return NULL;
while(current && current->value != K){
if(current->value >K){
current= current->left;
}
else{
predecessor = current;
current = current->right;
}
}
if(current && current->left){
predecessor = find_maximum(current->left);
}
return predecessor;
}
Node * create_node(int value){
Node * temp = (Node *)malloc(sizeof(Node));
temp->value = value;
temp->right= NULL;
temp->left = NULL;
return temp;
}
Node * addNode(Node *node, int value){
if(node == NULL){
return create_node(value);
}
else{
if (node->value > value){
node->left = addNode(node->left, value);
}
else{
node->right = addNode(node->right, value);
}
}
return node;
}
/* Driver program for the function written above */
int main(){
Node *root = NULL;
Node * last = NULL;
Node *ptrToHead = NULL;
//Creating a binary tree
root = addNode(root,30);
root = addNode(root,20);
root = addNode(root,15);
root = addNode(root,25);
root = addNode(root,40);
root = addNode(root,37);
root = addNode(root,45);
Node *pred = inorder_pred(root);
if(pred){
printf("%d" , pred->value);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment