**二叉树排序树 BST:**要么是空树,要么具有下列性质
- 如果左子树不空,则左子树的结点值小于根结点
- 如果右子树不空,则右子树的值大于根节点
- 中序遍历,从小到大排序好
- 最左边孩子,一定是最小的
- 最右边孩子,一定是最大的
- 左右子树也是BST
- 插入,删除比较方便
实现代码:
class Node
{
public:
Node(int v) :m_value(v), m_left(NULL), m_right(NULL) {
}
int m_value;
Node* m_left;
Node* m_right;
};
class BSTree
{
public:
BSTree() :m_root(NULL) {
}
void InsertBSTValue(Node*& root, int v);
Node* Search(Node* root, int k);
void Del(Node*& root, int k); // 删除值为k的结点
int GetMax()const;
int GetMin()const;
void Sort(Node* root);
Node* m_root;
};
/*
创建二叉树排序树--递归
1.先创建根
2.用v和根比较,v<root,则创建左子树
3.v>root,则创建右子树
*/
void BSTree::InsertBSTValue(Node*& root, int v)
{
if (root