#include <bits/stdc++.h>
using
namespace
std;
int
node = 0;
struct
Tree {
struct
Tree *left, *right;
int
info;
};
typedef
struct
Tree Tree;
Tree* INSERT(Tree* T,
int
x)
{
Tree* temp;
if
(T == NULL) {
T = (Tree*)
malloc
(
sizeof
(Tree));
T->left = T->right = NULL;
T->info = x;
return
T;
}
else
if
((T->info) > x) {
(T->left) = INSERT((T->left), x);
}
else
if
((T->info) <= x) {
(T->right) = INSERT((T->right), x);
}
return
T;
}
Tree* FindNode(Tree* root,
int
target)
{
if
(root == NULL || (root->info) == target)
return
root;
else
if
(target > (root->info))
return
(FindNode(root->right, target));
else
return
(FindNode(root->left, target));
}
void
downTraverse(Tree* target,
int
level)
{
if
(target == NULL) {
return
;
}
else
if
(level == 0) {
if
(node != 0)
cout << (target->info) <<
"\n"
;
node++;
}
downTraverse(target->left, level - 1);
downTraverse(target->right, level + 1);
if
(node == 0)
cout <<
"No nodes have been found that are "
"vertically downward from the target "
"node.\n"
;
}
int
main()
{
int
x, target;
Tree *root = NULL, *targetNode = NULL;
root = INSERT(root, 65);
INSERT(root, 23);
INSERT(root, 17);
INSERT(root, 40);
INSERT(root, 20);
INSERT(root, 50);
INSERT(root, 48);
INSERT(root, 43);
INSERT(root, 46);
INSERT(root, 45);
INSERT(root, 47);
INSERT(root, 85);
INSERT(root, 93);
targetNode = FindNode(root, 65);
if
(targetNode == NULL) {
cout <<
"-1"
;
}
else
{
downTraverse(targetNode, 0);
}
return
0;
}