http://www.geeksforgeeks.org/diameter-of-a-binary-tree/
1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 #include <queue> 5 #include <stack> 6 using namespace std; 7 8 struct node { 9 int data; 10 struct node *left, * right; 11 node() : data( 0 ), left(NULL), right(NULL) { } 12 node( int d) : data(d), left(NULL), right(NULL) { } 13 }; 14 15 void print(node * node) { 16 if (!node) return ; 17 print(node-> left); 18 cout << node->data << " " ; 19 print(node-> right); 20 } 21 22 int diameter(node *root, int & ans) { 23 if (!root) return 0 ; 24 int l = diameter(root-> left, ans); 25 int r = diameter(root-> right, ans); 26 ans = max(ans, l+r+ 1 ); 27 return max(l, r) + 1 ; 28 } 29 30 31 int main() { 32 struct node* root = new node( 1 ); 33 root->left = new node( 2 ); 34 root->right = new node( 3 ); 35 root->left->left = new node( 4 ); 36 root->left->right = new node( 5 ); 37 int ans = 0 ; 38 diameter(root, ans); 39 cout << ans << endl; 40 return 0 ; 41 }