Skip to content

Commit 788928a

Browse files
committed
Diameter of binary tree
1 parent 03a6fa3 commit 788928a

File tree

2 files changed

+90
-0
lines changed

2 files changed

+90
-0
lines changed

Tree/diameterOfBinaryTree.cpp

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#include <iostream>
2+
#include <vector>
3+
using namespace std;
4+
5+
// Node class
6+
class Node
7+
{
8+
public:
9+
int data;
10+
Node *left;
11+
Node *right;
12+
13+
Node(int val)
14+
{
15+
data = val;
16+
left = right = NULL;
17+
}
18+
};
19+
20+
static int idx = -1;
21+
Node *buildTree(vector<int> preorder)
22+
{
23+
idx++;
24+
25+
// base case
26+
if (preorder[idx] == -1)
27+
{
28+
return NULL;
29+
}
30+
31+
// create root node
32+
Node *root = new Node(preorder[idx]);
33+
34+
// left sub tree recursion call
35+
root->left = buildTree(preorder);
36+
37+
// right sub tree recursion call
38+
root->right = buildTree(preorder);
39+
40+
return root;
41+
}
42+
43+
// height of tree
44+
int height(Node *root)
45+
{
46+
// base case
47+
if (root == NULL)
48+
{
49+
return 0;
50+
}
51+
52+
// left subtree call
53+
int leftHt = height(root->left);
54+
55+
// right subtree call
56+
int rightHt = height(root->right);
57+
58+
return max(leftHt, rightHt) + 1;
59+
}
60+
61+
// diameter of tree
62+
int diameterOfBinaryTree(Node *root)
63+
{
64+
// base case
65+
if (root == NULL)
66+
{
67+
return 0;
68+
}
69+
70+
// left diameter call
71+
int leftDiam = diameterOfBinaryTree(root->left);
72+
73+
// right diameter call
74+
int RightDiam = diameterOfBinaryTree(root->right);
75+
76+
// current diameter call
77+
int currDiam = height(root->left) + height(root->right);
78+
79+
return max(currDiam, max(leftDiam, RightDiam));
80+
}
81+
82+
int main()
83+
{
84+
vector<int> preorder = {1, 2, 4, -1, -1, 5, -1, -1, 3, -1, -1};
85+
Node *root = buildTree(preorder);
86+
87+
cout << "Diameter : " << diameterOfBinaryTree(root) << endl;
88+
89+
return 0;
90+
}

Tree/diameterOfBinaryTree.exe

67.3 KB
Binary file not shown.

0 commit comments

Comments
 (0)