Solution #1: Maximum width of a tree is explained in the below e.g.
4
/ \
5 7
/ \ /
9 8 3
Width of level 1: 1
Width of level 2: 2
Width of level 3: 3
Therefore, maximum width: 3
We will first write a function to calculate the width at a given level and then will use this function to determine the maximum width of the tree. Here is the code,
int width(struct node* root, int level)
{
if(root == NULL)
return 0;
if(level == 1)
return 1;
return width(root->left, level-1) + width(root->right, level-1);
}
int maxWidth(struct node* root)
{
if(root == NULL)
return 0;
int maxW = 0;
int curW = 1;
int level=2;
while(curW)
{
curW = width(root, level++);
maxW = MAX(curW, maxW);
}
return maxW;
}
3 comments:
Might be a bad query...but just wanted to know shouldn't there be a check for root->left and root->right existence ??
@Anonymous: In case root->left or root->right is NULL, the first condition in width() will return 0.
PS: and it was a good enough query :)
The code is working properly although I have one doubt.
How is the value of the variable "value" decided? Is it always 2?
Thanks in advance!
Post a Comment