10063. Tree Поиск
Задано
бинарное дерево поиска. Найдите элемент в дереве.
Определение
дерева:
//Java
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
left = null;
right = null;
}
}
// C++
class TreeNode
{
public:
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
Реализуйте
функцию Find которая возвращает указатель на
найденный элемент. Если требуемый элемент не найден, верните NULL.
// Java
TreeNode Find(TreeNode tree,
int element)
// C++
TreeNode*
Find(TreeNode *tree,
int element)
Пример
Функция Find с element = 9 возвращает указатель на
вершину со значением 9.
дерево
Если tree =
NULL, то возвращаем NULL.
Начиная с корня, сравниваем
число element со значением в текущей вершине. Если они равны, то поиск
завершен. Если element < tree → val, то поиск продолжаем в левом поддереве, в противном
случае – в правом. Длина поиска не больше высоты дерева.
Реализация алгоритма
TreeNode* Find(TreeNode* tree, int element)
{
Если tree =
NULL, то возвращаем NULL.
if (tree == NULL) return NULL;
Если element совпадает со значением в текущей вершине, то возвращаем
указатель на текущую вершину.
if (element == tree->val) return tree;
Если element < tree → val, то поиск продолжаем в левом поддереве, в противном
случае – в правом.
if (element < tree->val) return Find(tree->left, element);
else return Find(tree->right, element);
}
Java реализация
TreeNode Find(TreeNode tree, int element)
{
if (tree == null) return null;
if (element == tree.val) return tree;
if (element < tree.val) return Find(tree.left, element);
else return Find(tree.right, element);
}