fork download
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. typedef struct Tnode
  5. {
  6. int data;
  7. struct Tnode *left;
  8. struct Tnode *right;
  9. }Tnode;
  10.  
  11. int TreeDiameter(Tnode *root)
  12. {
  13. static int max,diameter;
  14. static Tnode *tmp=NULL;
  15. if(root==NULL)
  16. return 0;
  17. if(tmp==NULL)
  18. tmp=root;
  19. int leftmax=TreeDiameter(root->left);
  20. int rightmax=TreeDiameter(root->right);
  21. if(diameter<(leftmax+rightmax))
  22. diameter=leftmax+rightmax;
  23. if(leftmax >= rightmax)
  24. {
  25. max=leftmax;
  26. }
  27. else
  28. {
  29. max=rightmax;
  30. }
  31. if(tmp==root)
  32. return diameter;
  33. return 1+max;
  34. }
  35.  
  36. int main()
  37. {
  38. Tnode *root,*n,*tmp,*tmp1,*a,*b;
  39. n=(Tnode*)malloc(sizeof(Tnode));
  40. n->data=10;
  41. n->left=NULL;
  42. n->right=NULL;
  43. root=n;
  44. tmp=n;
  45. tmp1=n;
  46.  
  47. n=(Tnode*)malloc(sizeof(Tnode));
  48. n->data=20;
  49. n->left=NULL;
  50. n->right=NULL;
  51. tmp->left=n;
  52. tmp=n;
  53. a=n;
  54.  
  55. n=(Tnode*)malloc(sizeof(Tnode));
  56. n->data=25;
  57. n->left=NULL;
  58. n->right=NULL;
  59. tmp->left=n;
  60. a=n;
  61.  
  62. n=(Tnode*)malloc(sizeof(Tnode));
  63. n->data=30;
  64. n->left=NULL;
  65. n->right=NULL;
  66. tmp->right=n;
  67. tmp=n;
  68.  
  69. n=(Tnode*)malloc(sizeof(Tnode));
  70. n->data=40;
  71. n->left=NULL;
  72. n->right=NULL;
  73. tmp1->right=n;
  74. tmp=n;
  75. tmp1=n;
  76.  
  77. n=(Tnode*)malloc(sizeof(Tnode));
  78. n->data=50;
  79. n->left=NULL;
  80. n->right=NULL;
  81. tmp1->left=n;
  82. tmp=n;
  83. b=n;
  84.  
  85. n=(Tnode*)malloc(sizeof(Tnode));
  86. n->data=10;
  87. n->left=NULL;
  88. n->right=NULL;
  89. tmp1->right=n;
  90.  
  91. n=(Tnode*)malloc(sizeof(Tnode));
  92. n->data=90;
  93. n->left=NULL;
  94. n->right=NULL;
  95. a->left=n;
  96.  
  97. printf("%d\n",TreeDiameter(root));
  98. return 0;
  99. }
Success #stdin #stdout 0s 2856KB
stdin
Standard input is empty
stdout
5