New algo for tree added

pull/741/head
Aarnav Jp 2022-04-16 17:40:49 +05:30
parent dd601a7734
commit e5a3363f02
1 changed files with 109 additions and 0 deletions

View File

@ -0,0 +1,109 @@
/*
Problem: Return an array of the values of all nodes that have
a distance k from the target node.
*/
/*-------------------------
Recursive Solution
Time Complexity: O(n)
---------------------*/
#include <iostream>
#include <vector>
using namespace std;
// Basic Structure of a tree
class Node
{
private:
int data;
Node *left;
Node *right;
public:
Node(int value)
{
data = value;
left = NULL;
right = NULL;
}
void insert(Node *&root, int data)
{
if (root == NULL)
root = new Node(data);
else if (root->data > data)
insert(root->left, data);
else
insert(root->right, data);
}
vector<int> v;
void kdown(Node *root, Node *block, int k)
{
if (root == NULL or root == block or k < 0)
{
return;
}
if (k == 0)
{
v.push_back(root->data);
return;
}
kdown(root->left, block, k - 1);
kdown(root->right, block, k - 1);
}
int k_help(Node *root, Node *target, int k)
{
if (root == NULL)
return -1;
if (root == target)
{
kdown(root, NULL, k);
return 1;
}
int ld = k_help(root->left, target, k);
if (ld != -1)
{
kdown(root, root->left, k - ld);
return 1 + ld;
}
int rd = k_help(root->right, target, k);
if (rd != -1)
{
kdown(root, root->right, k - rd);
return 1 + rd;
}
return -1;
}
vector<int> distanceK(Node *root, Node *target, int k)
{
k_help(root, target, k);
return v;
}
};
int main()
{
// User Input
Node *root = NULL;
Node *tar;
int n, num, tar, k;
cout << "Enter the Number of nodes :";
cin >> n;
cout << "\nEnter the value of the nodes :";
for (int i = 0; i < n; i++)
{
cin >> num;
root->insert(root, num);
}
cout << "\nEnter the target value :" << tar;
cout << "Enter the distance you to search :" << k;
vector<int> v = root->distanceK(root, tar, k);
for (auto i : v)
{
cout << i << " ";
}
return 0;
}