// 二叉搜索树:
// A.每个结点都有一个关键码,每个关键码互不相同;
// B.左子树(若存在)上所有结点的关键码都小于根结点的关键码;
// C.右子树(若存在)上所有结点的关键码都大于根结点的关键码;
// D.左子树和右子树也是二叉搜索树
//
// 建立:采取插入建立
// 遍历:采取中序遍历
//
// 测试数据:53 78 65 17 87 09 81 15 -1(结束标志)
#include <iostream>
#include <stack>
template <class T>
struct BSTNode // 二叉搜索树结点的结构定义
{
T data;
BSTNode *lChild, *rChild; // 左右孩子指针
};
template <class T>
class BinarySearchTree
{
public:
BinarySearchTree(BSTNode<T> *p = NULL) {root = p;} // 构造函数
void createBST(); // 建立二叉搜索树
bool Insert(T x); // 递归插入
bool Insert1(T x); // 非递归插入
bool Pop(T x); // 删除:查找到x,删除x
void inOrder(); // 中序遍历
bool seachBST(T x); // 查找函数:递归查找
bool seachBST1(T x); // 查找函数:非递归查找
T getMin(); // 获取最小值
T getMax(); // 获取最大值
private:
bool seachBST(T x, BSTNode<T> *p); // 递归搜索
bool Insert(T x, BSTNode<T> *&p); // 递归插入
bool deleteNode(T x, BSTNode<T> *&p); // 删除结点
BSTNode<T> *root;
};
// 建立二叉搜索树
template <class T>
void BinarySearchTree<T>::createBST()
{
int x;
std::cout << "请输入数据建立二叉搜索树:\n";
std::cin >> x;
while(x != -1)
{
Insert(x);
std::cin >> x;
}
}
// 递归插入
template <class T>
bool BinarySearchTree<T>::Insert(T x)
{
return Insert(x, root);
}
// 递归插入:注意要使用引用符号&,否则每次插入被忽略,root永远为NULL
template <class T>
bool BinarySearchTree<T>::Insert(T x, BSTNode<T> *&p)
{
BSTNode<T> *newNode;
if(p == NULL) {
newNode = new BSTNode<T>(); // 新结点
if(newNode == NULL)
{
std::cerr << "申请空间失败!\n";
exit(1);
}
newNode->data = x;
newNode->lChild = newNode->rChild = NULL;
p = newNode;
return true; // 插入成功
}
if(x < p->data)
C++ 二叉搜索树(Binary Search Tree)
最新推荐文章于 2025-04-15 20:35:13 发布