0% found this document useful (0 votes)
281 views

Write A C Program To Find The Maximum Depth or Height of A Tree

This C program finds the maximum depth or height of a binary tree. It does this by recursively calculating the height of the left and right subtrees of each node and returning the maximum of the two heights plus one. The algorithm first checks if the tree is empty, then recursively finds the maximum depth of the left and right subtrees and returns the maximum of the two plus one.

Uploaded by

Anonymous HXY4UF
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
281 views

Write A C Program To Find The Maximum Depth or Height of A Tree

This C program finds the maximum depth or height of a binary tree. It does this by recursively calculating the height of the left and right subtrees of each node and returning the maximum of the two heights plus one. The algorithm first checks if the tree is empty, then recursively finds the maximum depth of the left and right subtrees and returns the maximum of the two plus one.

Uploaded by

Anonymous HXY4UF
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

Write a C Program to Find the Maximum Depth or Height of a Tree

Maximum depth or height of the below tree is 3.

Example Tree
Recursively calculate height of left and right subtrees of a node and assign height to the node as max of
the heights of two children plus 1. See below pseudo code and program for details.
Algorithm:
maxDepth()
1. If tree is empty then return 0
2. Else
(a) Get the max depth of left subtree recursively i.e.,
call maxDepth( tree->left-subtree)
(a) Get the max depth of right subtree recursively i.e.,
call maxDepth( tree->right-subtree)
(c) Get the max of max depths of left and right
subtrees and add 1 to it for the current node.
max_depth = max(max dept of left subtree,
max depth of right subtree)
+ 1
(d) Return max_depth
See the below diagram for more clarity about execution of the recursive function maxDepth() for
above example tree.
maxDepth('1') = max(maxDepth('2'), maxDepth('3')) + 1
= 2 + 1
/
\
/
\
/
\
/
\
/
\
maxDepth('1')
maxDepth('3') = 1
= max(maxDepth('4'), maxDepth('5')) + 1
= 1 + 1
= 2
/
\
/
\
/
\
/
\
/
\
maxDepth('4') = 1
maxDepth('5') = 1

Implementation:
#include<stdio.h>
#include<stdlib.h>
/* A binary tree node has data, pointer to left child
and a pointer to right child */
struct node
{
int data;
struct node* left;
struct node* right;
};
/* Compute the "maxDepth" of a tree -- the number of
nodes along the longest path from the root node
down to the farthest leaf node.*/
int maxDepth(struct node* node)
{
if (node==NULL)
return 0;
else
{
/* compute the depth of each subtree */
int lDepth = maxDepth(node->left);
int rDepth = maxDepth(node->right);
/* use the larger one */
if (lDepth > rDepth)
return(lDepth+1);
else return(rDepth+1);
}

/* Helper function that allocates a new node with the


given data and NULL left and right pointers. */
struct node* newNode(int data)
{
struct node* node = (struct node*)
malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
int main()
{
struct node *root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
printf("Hight of tree is %d", maxDepth(root));

getchar();
return 0;

* C Program to Print Height and Depth of given Binary Tree


*

50

/ \

20 30

/ \

70 80

/\

10 40 60

*/
#include <stdio.h>
#include <stdlib.h>
struct btnode {
int value;
struct btnode *l;
struct btnode *r;
};
struct btnode *root;
typedef struct btnode bt;
bt *new,*ptr,*ptr1,*ptr2;
bt* create()
{
new = (bt *)malloc(sizeof(bt));
new->l = NULL;
new->r = NULL;
return new;
}
void construct_binary_tree()
{
root = create();
root->value = 50;
ptr = create();
root->l = ptr;
ptr->value = 20;
ptr1 = create();
ptr->l = ptr1;
ptr1->value = 70;
ptr2 = create();
ptr1->l = ptr2;
ptr2->value = 10;
ptr2 = create();
ptr1->r = ptr2;
ptr2->value = 40;

ptr1 = create();
ptr->r = ptr1;
ptr1->value = 80;
ptr2 = create();
ptr1->r = ptr2;
ptr2->value = 60;
ptr = create();
root->r = ptr;
ptr->value = 30;
}
void main()
{
int depth1 = 0, depth2 = 0;
construct_binary_tree();
ptr = root;
while (ptr->l != NULL || ptr->r != NULL)
{
depth1++;
if (ptr->l == NULL)
ptr = ptr->r;
else
ptr = ptr->l;
}
ptr = root;
while (ptr->l != NULL || ptr->r != NULL)
{
depth2++;
if (ptr->r == NULL)
ptr = ptr->l;
else
ptr = ptr->r;
}
/*
*DEPTH IS CONSIDERED FROM LEVEL-0 ALSO HEIGHT IS CONSIDERED AS NUMBER OF
EDGES
*/
if (depth1 > depth2)
printf("height of the tree is %d\ndepth of the tree is %d",depth1,depth1);
else
printf("height of the tree is %d\ndepth of the tree is %d",depth2,depth2);
}

You might also like