Diameter of a Binary Tree
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
struct TreeNode {
int data;
TreeNode *left, *right;
TreeNode(int d) : data(d), left(NULL), right(NULL) {}
};
int height(TreeNode *root) {
if(!root) return 0;
int hl = height(root->left), hr = height(root->right);
return hl > hr ? hl + 1 : hr + 1;
}
int diameter(TreeNode *root) {
if(!root) return 0;
int hl = height(root->left), hr = height(root->right);
return max(hl + hr + 1, max(diameter(root->left), diameter(root->right)));
}
int main()
{
TreeNode *r = new TreeNode(5);
r->left = new TreeNode(4); r->right = new TreeNode(6);
r->left->left = new TreeNode(3);
r->right->right = new TreeNode(7);
cout << diameter(r);
return 0;
}