I have written a code for finding diameter of Binary Tree. Need suggestions for the following:
Here is one recursive solution in C++ which gives you the height as well as diameter of binary tree.
struct tree
{
int height = -1;
int diameter = 0;
};
struct tree BSTDiameter(struct node *root)
{
struct tree currentTree, leftTree, rightTree;
if (root == NULL)
{
currentTree.height = -1;
currentTree.diameter = 0;
return currentTree;
}
leftTree = BSTDiameter(root->left);
rightTree = BSTDiameter(root->right);
currentTree.height = ((leftTree.height > rightTree.height) ? leftTree.height : rightTree.height) + 1;
if (leftTree.height == -1 || rightTree.height == -1)
currentTree.diameter = 0;
else
currentTree.diameter = (leftTree.height + rightTree.height + 3) > (rightTree.diameter > leftTree.diameter ? rightTree.diameter : leftTree.diameter) ? (leftTree.height + rightTree.height + 3) : (rightTree.diameter > leftTree.diameter ? rightTree.diameter : leftTree.diameter);
return currentTree;
}
The time complexity of this is O(h) where h is height of the tree. Hope that helped you.