Skip to main content

Print all odd nodes of Binary Search Tree in c

Print all odd nodes of BST

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




Comment

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