New algo for tree added
parent
dd601a7734
commit
e5a3363f02
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue