Продолжение статьи про бинарные деревья...Уже третья часть...
На повестке дня - 2 вида поиска в бинарном дереве. Точнее, вид один, но видов возращаемых значений 2 - это true/false и pointer, то есть указатель на элемент в дереве.
Использовать будем конечно шаблоны и рекурсию. Ниже листинги этих четырёх (2 основных и две, которые вызываются рекурсивно) функций.
На повестке дня - 2 вида поиска в бинарном дереве. Точнее, вид один, но видов возращаемых значений 2 - это true/false и pointer, то есть указатель на элемент в дереве.
Использовать будем конечно шаблоны и рекурсию. Ниже листинги этих четырёх (2 основных и две, которые вызываются рекурсивно) функций.
Возращает булевское значение :
bool FindReturnBool(const TypeOfTree& dataToInsert);
//Вспомагательная функция для поиска елемента(true/false)
bool _FindReturnBool(BinaryTree<TypeOfTree>* element,const TypeOfTree& dataToInsert);
bool FindReturnBool(const TypeOfTree& dataToInsert);
//Вспомагательная функция для поиска елемента(true/false)
bool _FindReturnBool(BinaryTree<TypeOfTree>* element,const TypeOfTree& dataToInsert);
//Листинг функции поиска элементов, которая
возвращает true/false
template
<typename TypeOfTree>
bool
MainBinaryTree<TypeOfTree>::FindReturnBool(const
TypeOfTree& dataToInsert) {
return _FindReturnBool(rootOfTree, dataToInsert);
}
template
<typename TypeOfTree>
bool
MainBinaryTree<TypeOfTree>::_FindReturnBool(BinaryTree<TypeOfTree>*
element,const TypeOfTree&
dataToInsert) {
if
(!element)
return
false;
else
if
(element->field == dataToInsert){
++this->transitions;
return
true;
}
else
if
(dataToInsert < element->field){
++this->transitions;
return _FindReturnBool(element->leftPointer,
dataToInsert);
}
else{
++this->transitions;
return _FindReturnBool(element->rightPointer,
dataToInsert);
}
}
Возращает указатель :
BinaryTree<TypeOfTree>* FindReturnPointer(const TypeOfTree& dataToInsert);
//Вспомагательная функция для поиска елемента(pointer)
BinaryTree<TypeOfTree>* _FindReturnPointer(BinaryTree<TypeOfTree>* element, const TypeOfTree& dataToInsert) ;
BinaryTree<TypeOfTree>* FindReturnPointer(const TypeOfTree& dataToInsert);
//Вспомагательная функция для поиска елемента(pointer)
BinaryTree<TypeOfTree>* _FindReturnPointer(BinaryTree<TypeOfTree>* element, const TypeOfTree& dataToInsert) ;
//Листинг функции поиска элемента, который
возвращает указатель на узел
template
<typename TypeOfTree>
BinaryTree<TypeOfTree>*
MainBinaryTree<TypeOfTree>::FindReturnPointer(const
TypeOfTree& dataToInsert) {
return
_FindReturnPointer(rootOfTree, dataToInsert);
}
template
<typename TypeOfTree>
BinaryTree<TypeOfTree>*
MainBinaryTree<TypeOfTree>::_FindReturnPointer(BinaryTree<TypeOfTree>*
element, const TypeOfTree&
dataToInsert) {
if
(!element)
return
nullptr;
else if (element->field == dataToInsert){
++this->transitions;
return
element;
}
else
if
(dataToInsert < element->field){
++this->transitions;
return
_FindReturnPointer(element->leftPointer, dataToInsert);
}
else{
++this->transitions;
return
_FindReturnPointer(element->rightPointer, dataToInsert);
}
}
Комментариев нет:
Отправить комментарий