fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. struct Node {
  5. int data;
  6. Node *left, *right;
  7. Node(int value) {
  8. data = value;
  9. left = NULL;
  10. right = NULL;
  11. }
  12. };
  13.  
  14. int diameterOpt(Node* root, int* height) {
  15.  
  16. int lh=0,rh=0;
  17.  
  18. int ldiameter=0;
  19. int rdiameter=0;
  20.  
  21. if(root == NULL)
  22. {
  23. *height =0;
  24. return 0;
  25. }
  26.  
  27. ldiameter = diameterOpt(root->left,&lh);
  28. rdiameter = diameterOpt(root->right,&rh);
  29.  
  30. *height = max(lh,rh)+1;
  31.  
  32.  
  33. return max(lh+rh+1,max(ldiameter,rdiameter));
  34. }
  35.  
  36. // Driver Code
  37. int main() {
  38.  
  39. /* Constructed binary tree is
  40.   1
  41.   / \
  42.   2 3
  43.   / \
  44.   4 5
  45.   */
  46. Node* root = new Node(1);
  47. root->left = new Node(2);
  48. root->right = new Node(3);
  49. root->left->left = new Node(4);
  50. root->left->right = new Node(5);
  51.  
  52. int height = 0;
  53.  
  54. cout << diameterOpt(root, &height) << endl;
  55.  
  56. return 0;
  57. }
Success #stdin #stdout 0s 5272KB
stdin
Standard input is empty
stdout
4