二叉搜索树
概念
二叉搜索树又称为二叉排序树(可以是一棵空树)
一般具有以下性质
1.若左子树不为空,则左子树上的所有节点的值均小于(大于)根节点的值
2.若右子树不为空,则右子树上的所有节点的值均大于(小于)根节点的值
3.左右子树的结构以满足上述性质
4.二叉搜索树一般不存在值相同的节点
代码定义
template <class T>
//定义结点的结构体
struct BSTNode{
T _val;
BSTNode<T>* _left;
BSTNode<T>* _right;
BSTNode(const T& val=T())
:_val(val)
,_left(nullptr)
,_right(nullptr)
{
}
};
template <class T>
//定义二叉搜索树的类
class BSTree {
public:
typedef BSTNode<T> Node;
Node* find(const T& val);
bool insert(const T& val);
bool erase(const T& val);
void inorder();
void _inorder(Node* root);
void destory(Node* root);
Node* copyTree(Node* root);
BSTree()
:_root(nullptr)
{
}
BSTree(const BSTree<T>& bst)
:_root(nullptr)
{
_root = copyTree(bst._root);
}
BSTree<T>& operator=(BSTree<T> bst) {