搜索二叉树的实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
template<class T>
struct BSTNode
{
BSTNode(const T& data = T())
:_pleft(nullptr)
, _pright(nullptr)
, _data(data)
{}
BSTNode<T>* _pleft;
BSTNode<T>* _pright;
T _data;
};
template<class T>
class BSTree
{
typedef BSTNode<T> Node;
typedef Node* PNode;
public:
BSTree()
:_pRoot(nullptr)
{}
~BSTNode()
{
_Destroy(_pRoot);
}
PNode Find(const T& data)
{
PNode cur = _pRoot;
while (cur)
{
if (data == _pRoot->data)
{
return cur;
}
else if (data > _pRoot->data)
{
cur = _pRoot->pleft;
}
else(data < _pRoot->data)
{
cur = _pRoot->pright;
}
}
return nullptr;
}
bool Insert(const T& data)
{
//树为空时
PNode cur = _pRoot;
if (cur == nullptr)
{
cur = new Node(data);
return true;
}
//树不为空
//记录cur的双亲,因为新元素最终插入在cur双亲左右孩子的位置
PNode parent = nullptr;