#include <bits/stdc++.h>
using namespace std;
struct Node {
struct Node* left;
struct Node* right;
int data;
};
Node* newNode(int key)
{
Node* temp = new Node;
temp->data = key;
temp->left = temp->right = NULL;
return temp;
}
int finddepth(Node* root)
{
if (!root)
return 0;
int left = finddepth(root->left);
int right = finddepth(root->right);
return 1 + max(left, right);
}
Node* dfs(Node* root, int curr,
int depth)
{
if (!root)
return NULL;
if (curr == depth)
return root;
Node* left = dfs(root->left,
curr + 1, depth);
Node* right = dfs(root->right,
curr + 1, depth);
if (left != NULL && right != NULL)
return root;
return left ? left : right;
}
Node* lcaOfDeepestLeaves(Node* root)
{
if (!root)
return NULL;
int depth = finddepth(root) - 1;
return dfs(root, 0, depth);
}
int main()
{
Node* root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
root->right->left = newNode(6);
root->right->right = newNode(7);
root->right->left->left = newNode(8);
root->right->left->right = newNode(9);
cout << lcaOfDeepestLeaves(root)->data;
return 0;
}
Original page link
Best Cool Tech Gadgets
Top favorite technology gadgets
0 comments:
Post a Comment