#include<stdio.h>
#include<stdlib.h>
typedef struct Tnode
{
int data;
struct Tnode *left;
struct Tnode *right;
}Tnode;
int TreeDiameter(Tnode *root)
{
static int max,diameter;
static Tnode *tmp=NULL;
if(root==NULL)
return 0;
if(tmp==NULL)
tmp=root;
int leftmax=TreeDiameter(root->left);
int rightmax=TreeDiameter(root->right);
if(diameter<(leftmax+rightmax))
diameter=leftmax+rightmax;
if(leftmax >= rightmax)
{
max=leftmax;
}
else
{
max=rightmax;
}
if(tmp==root)
return diameter;
return 1+max;
}
int main()
{
Tnode *root,*n,*tmp,*tmp1,*a,*b;
n=(Tnode*)malloc(sizeof(Tnode));
n->data=10;
n->left=NULL;
n->right=NULL;
root=n;
tmp=n;
tmp1=n;
n=(Tnode*)malloc(sizeof(Tnode));
n->data=20;
n->left=NULL;
n->right=NULL;
tmp->left=n;
tmp=n;
a=n;
n=(Tnode*)malloc(sizeof(Tnode));
n->data=25;
n->left=NULL;
n->right=NULL;
tmp->left=n;
a=n;
n=(Tnode*)malloc(sizeof(Tnode));
n->data=30;
n->left=NULL;
n->right=NULL;
tmp->right=n;
tmp=n;
n=(Tnode*)malloc(sizeof(Tnode));
n->data=40;
n->left=NULL;
n->right=NULL;
tmp1->right=n;
tmp=n;
tmp1=n;
n=(Tnode*)malloc(sizeof(Tnode));
n->data=50;
n->left=NULL;
n->right=NULL;
tmp1->left=n;
tmp=n;
b=n;
n=(Tnode*)malloc(sizeof(Tnode));
n->data=10;
n->left=NULL;
n->right=NULL;
tmp1->right=n;
n=(Tnode*)malloc(sizeof(Tnode));
n->data=90;
n->left=NULL;
n->right=NULL;
a->left=n;
printf("%d\n",TreeDiameter(root));
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8c3RkbGliLmg+Cgp0eXBlZGVmIHN0cnVjdCBUbm9kZQp7CglpbnQgZGF0YTsKCXN0cnVjdCBUbm9kZSAqbGVmdDsKCXN0cnVjdCBUbm9kZSAqcmlnaHQ7Cn1Ubm9kZTsKCmludCBUcmVlRGlhbWV0ZXIoVG5vZGUgKnJvb3QpCnsKICAgIHN0YXRpYyBpbnQgbWF4LGRpYW1ldGVyOwogICAgc3RhdGljIFRub2RlICp0bXA9TlVMTDsKICAgIGlmKHJvb3Q9PU5VTEwpCiAgICAgICAgcmV0dXJuIDA7CiAgICBpZih0bXA9PU5VTEwpCiAgICAgICAgdG1wPXJvb3Q7CiAgICBpbnQgbGVmdG1heD1UcmVlRGlhbWV0ZXIocm9vdC0+bGVmdCk7CiAgICBpbnQgcmlnaHRtYXg9VHJlZURpYW1ldGVyKHJvb3QtPnJpZ2h0KTsKICAgIGlmKGRpYW1ldGVyPChsZWZ0bWF4K3JpZ2h0bWF4KSkKICAgICAgICBkaWFtZXRlcj1sZWZ0bWF4K3JpZ2h0bWF4OwogICAgaWYobGVmdG1heCA+PSByaWdodG1heCkKICAgIHsKICAgICAgICBtYXg9bGVmdG1heDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBtYXg9cmlnaHRtYXg7CiAgICB9CiAgICBpZih0bXA9PXJvb3QpCiAgICAgICAgcmV0dXJuIGRpYW1ldGVyOwogICAgcmV0dXJuIDErbWF4Owp9CgppbnQgbWFpbigpCnsKCVRub2RlICpyb290LCpuLCp0bXAsKnRtcDEsKmEsKmI7CgluPShUbm9kZSopbWFsbG9jKHNpemVvZihUbm9kZSkpOwoJbi0+ZGF0YT0xMDsKCW4tPmxlZnQ9TlVMTDsKCW4tPnJpZ2h0PU5VTEw7Cglyb290PW47Cgl0bXA9bjsKCXRtcDE9bjsKCQoJbj0oVG5vZGUqKW1hbGxvYyhzaXplb2YoVG5vZGUpKTsKCW4tPmRhdGE9MjA7CgluLT5sZWZ0PU5VTEw7CgluLT5yaWdodD1OVUxMOwoJdG1wLT5sZWZ0PW47Cgl0bXA9bjsKCWE9bjsKCgluPShUbm9kZSopbWFsbG9jKHNpemVvZihUbm9kZSkpOwoJbi0+ZGF0YT0yNTsKCW4tPmxlZnQ9TlVMTDsKCW4tPnJpZ2h0PU5VTEw7Cgl0bXAtPmxlZnQ9bjsKCWE9bjsKCgluPShUbm9kZSopbWFsbG9jKHNpemVvZihUbm9kZSkpOwkKCW4tPmRhdGE9MzA7CgluLT5sZWZ0PU5VTEw7CgluLT5yaWdodD1OVUxMOwoJdG1wLT5yaWdodD1uOwoJdG1wPW47CgoJbj0oVG5vZGUqKW1hbGxvYyhzaXplb2YoVG5vZGUpKTsKCW4tPmRhdGE9NDA7CgluLT5sZWZ0PU5VTEw7CgluLT5yaWdodD1OVUxMOwoJdG1wMS0+cmlnaHQ9bjsKCXRtcD1uOwoJdG1wMT1uOwoJCgluPShUbm9kZSopbWFsbG9jKHNpemVvZihUbm9kZSkpOwoJbi0+ZGF0YT01MDsKCW4tPmxlZnQ9TlVMTDsKCW4tPnJpZ2h0PU5VTEw7Cgl0bXAxLT5sZWZ0PW47Cgl0bXA9bjsKCWI9bjsKCgluPShUbm9kZSopbWFsbG9jKHNpemVvZihUbm9kZSkpOwoJbi0+ZGF0YT0xMDsKCW4tPmxlZnQ9TlVMTDsKCW4tPnJpZ2h0PU5VTEw7Cgl0bXAxLT5yaWdodD1uOwoKCW49KFRub2RlKiltYWxsb2Moc2l6ZW9mKFRub2RlKSk7CgluLT5kYXRhPTkwOwoJbi0+bGVmdD1OVUxMOwoJbi0+cmlnaHQ9TlVMTDsKCWEtPmxlZnQ9bjsKCQoJcHJpbnRmKCIlZFxuIixUcmVlRGlhbWV0ZXIocm9vdCkpOwogICAgICAgIHJldHVybiAwOwp9