Print all odd nodes of Binary Search Tree in c

C program for Print all odd nodes of Binary Search Tree. Here mentioned other language solution.
// Include header file
#include <stdio.h>
#include <stdlib.h>
// C program for
// Detect and print all leaf nodes in binary search tree
// Binary Search Tree Node
typedef struct TreeNode
{
// Define useful field of TreeNode
// Data value
int data;
// Indicates left and right subtree
struct TreeNode * left;
struct TreeNode * right;
}TreeNode;
TreeNode * getTreeNode(int data)
{
// Create dynamic memory of TreeNode
TreeNode * ref = (TreeNode * ) malloc(sizeof(TreeNode));
if (ref == NULL)
{
// Failed to create memory
return NULL;
}
ref->data = data;
ref->left = NULL;
ref->right = NULL;
return ref;
}
typedef struct BinarySearchTree
{
// Define useful field of BinarySearchTree
struct TreeNode * root;
}BinarySearchTree;
BinarySearchTree * getBinarySearchTree()
{
// Create dynamic memory of BinarySearchTree
BinarySearchTree * ref = (BinarySearchTree * ) malloc(sizeof(BinarySearchTree));
if (ref == NULL)
{
// Failed to create memory
return NULL;
}
ref->root = NULL;
return ref;
}
// Insert a node in BST
void addNode(BinarySearchTree * ref, int value)
{
// Create new node of binary search tree
TreeNode * node = getTreeNode(value);
if (node != NULL)
{
if (ref->root == NULL)
{
// When adds a first node in binary tree
ref->root = node;
}
else
{
TreeNode * find = ref->root;
// Add new node to proper position
while (find != NULL)
{
if (find->data >= value)
{
if (find->left == NULL)
{
find->left = node;
return;
}
else
{
// Visit left sub-tree
find = find->left;
}
}
else
{
if (find->right == NULL)
{
find->right = node;
return;
}
else
{
// Visit right sub-tree
find = find->right;
}
}
}
}
}
else
{
printf("\nMemory Overflow");
}
}
// Display the value of odd nodes in binary search tree
void printOddNode(TreeNode * node)
{
if (node != NULL)
{
// Visit to left child
printOddNode(node->left);
if (node->data % 2 != 0)
{
// When node contain odd value
printf(" %d", node->data);
}
// Visit to right child
printOddNode(node->right);
}
}
int main()
{
BinarySearchTree * tree = getBinarySearchTree();
// Add nodes in binary search tree
/*
5
/ \
/ \
/ \
3 9
/ \ / \
1 4 8 11
/ \ / \
-3 2 6 12
*/
addNode(tree, 5);
addNode(tree, 3);
addNode(tree, 9);
addNode(tree, 1);
addNode(tree, 4);
addNode(tree, 8);
addNode(tree, 11);
addNode(tree, -3);
addNode(tree, 2);
addNode(tree, 6);
addNode(tree, 12);
// Test
printOddNode(tree->root);
return 0;
}
Output
-3 1 3 5 9 11
Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.
New Comment