#include<stdio.h>
#include<stdlib.h>
struct TreeNode
{
int data;
struct TreeNode* left;
struct TreeNode* right;
};
typedef struct TreeNode TreeNode;
TreeNode* createNode(int data)
{
TreeNode
* temp
= (TreeNode
*)malloc(sizeof(TreeNode
)); temp->data = data;
temp->left = temp->right = NULL;
return temp;
}
void printTree(TreeNode* root, int space)
{
if (root == NULL)
return;
// Increase distance between levels
int COUNT = 5;
space += COUNT;
// Print right child first
printTree(root->right, space);
// Print current node after space count
for (int i = COUNT; i < space; i++)
// Print left child
printTree(root->left, space);
}
void preorder(TreeNode* root)
{
if(root==NULL) return;
preorder(root->left);
preorder(root->right);
}
void inorder(TreeNode* root)
{
if(root==NULL) return;
inorder(root->left);
inorder(root->right);
}
void postorder(TreeNode* root)
{
if(root==NULL) return;
postorder(root->left);
postorder(root->right);
}
int height(TreeNode* root)
{
if(root==NULL) /// root NULL
{
return 0;
}
else if(root->left==NULL && root->right==NULL) /// child count: 0
{
return 0;
}
else
{
if(root->left!=NULL && root->right!=NULL) /// child count: 2
{
int left_side_height = height(root->left);
int right_side_height = height(root->right);
if(left_side_height>right_side_height)
{
return left_side_height + 1;
}
else
return right_side_height + 1;
}
else if(root->left!=NULL) /// child count: 1 (Left Child)
{
int left_side_height = height(root->left);
return left_side_height + 1;
}
else /// child count: 1 (Right Child)
{
int right_side_height = height(root->right);
return right_side_height + 1;
}
}
}
int findValue(TreeNode* root, int value)
{
if(root==NULL) return 0;
else if(root->data==value) return 1;
else
{
int left_answer = findValue(root->left, value);
int right_answer = findValue(root->right, value);
return left_answer || right_answer;
}
}
int countNodes(TreeNode* root)
{
if(root==NULL) return 0;
else
{
int left_answer = countNodes(root->left);
int right_answer = countNodes(root->right);
return left_answer + right_answer + 1;
}
}
int countLeaves(TreeNode* root)
{
if(root==NULL) return 0;
else if(root->left==NULL && root->right==NULL) return 1;
else
{
int left_answer = countLeaves(root->left);
int right_answer = countLeaves(root->right);
return left_answer + right_answer;
}
}
int main()
{
TreeNode* root = createNode(10);
root->left = createNode(20);
root->right = createNode(30);
root->left->left = createNode(40);
root->left->right = createNode(50);
root->right->left = createNode(60);
root->right->right = createNode(70);
root->right->right->left = createNode(80);
printTree(root, 0);
printf("Preorder Traversal Sequence: "); preorder(root);
printf("Inorder Traversal Sequence: "); inorder(root);
printf("Postorder Traversal Sequence: "); postorder(root);
printf("Height of the tree: %d\n", height
(root
));
return 0;
}