#include <stdio.h>
#include <stdlib.h>
int
max(
int
x,
int
y) {
return
(x > y)? x : y; }
struct
Node
{
int
data;
struct
Node *left, *right;
};
struct
Node* newNode(
int
data)
{
struct
Node* node = (
struct
Node*)
malloc
(
sizeof
(
struct
Node));
node->data = data;
node->left = node->right = NULL;
return
node;
}
int
depthOfOddLeafUtil(
struct
Node *root,
int
level)
{
if
(root == NULL)
return
0;
if
(root->left==NULL && root->right==NULL && level&1)
return
level;
return
max(depthOfOddLeafUtil(root->left, level+1),
depthOfOddLeafUtil(root->right, level+1));
}
int
depthOfOddLeaf(
struct
Node *root)
{
int
level = 1, depth = 0;
return
depthOfOddLeafUtil(root, level);
}
int
main()
{
struct
Node* root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->right->left = newNode(5);
root->right->right = newNode(6);
root->right->left->right = newNode(7);
root->right->right->right = newNode(8);
root->right->left->right->left = newNode(9);
root->right->right->right->right = newNode(10);
root->right->right->right->right->left = newNode(11);
printf
(
"%d is the required depth\n"
, depthOfOddLeaf(root));
getchar
();
return
0;
}