概述
二叉搜索树(Binary Search Tree,简称 BST)是计算机科学中一种重要的树形数据结构。它利用键值的有序性,高效支持数据的插入、删除和查找操作,是许多复杂算法的基础组件。
核心性质在于:若左子树不为空,则所有节点值小于根节点;若右子树不为空,则所有节点值大于根节点。左右子树也均为二叉搜索树。这意味着中序遍历的结果必然是升序序列。
核心实现
下面展示基于 C++ 的迭代式实现。相比递归,迭代法在处理深层树时能避免栈溢出风险,更适合生产环境。
template <class K>
struct BSTreeNode {
BSTreeNode<K>* _left;
BSTreeNode<K>* _right;
K _key;
BSTreeNode(const K& key) : _left(nullptr), _right(nullptr), _key(key) {}
};
template <class K>
class BSTree {
typedef BSTreeNode<K> Node;
public:
BSTree() : _root(nullptr) {}
~BSTree() { Destroy(_root); }
bool Insert(const K& key) {
if (_root == nullptr) {
_root = new Node(key);
return true;
}
Node* parent = nullptr;
Node* cur = _root;
while (cur) {
if (key > cur->_key) {
parent = cur;
cur = cur->_right;
} else if (key < cur->_key) {
parent = cur;
cur = cur->_left;
} else {
return ;
}
}
cur = (key);
(key > parent->_key)
parent->_right = cur;
parent->_left = cur;
;
}
{
Node* cur = _root;
(cur) {
(key > cur->_key) cur = cur->_right;
(key < cur->_key) cur = cur->_left;
;
}
;
}
{
Node* parent = ;
Node* cur = _root;
(cur) {
(key > cur->_key) {
parent = cur;
cur = cur->_right;
} (key < cur->_key) {
parent = cur;
cur = cur->_left;
} {
(cur->_left == ) {
(cur == _root) _root = cur->_right;
(parent->_right == cur) parent->_right = cur->_right;
parent->_left = cur->_right;
} (cur->_right == ) {
(cur == _root) _root = cur->_left;
(parent->_right == cur) parent->_right = cur->_left;
parent->_left = cur->_left;
} {
Node* leftMaxParent = cur;
Node* leftMax = cur->_left;
(leftMax->_right) {
leftMaxParent = leftMax;
leftMax = leftMax->_right;
}
(cur->_key, leftMax->_key);
(leftMaxParent->_left == leftMax)
leftMaxParent->_left = leftMax->_left;
leftMaxParent->_right = leftMax->_left;
leftMax;
;
}
cur;
;
}
}
;
}
:
{
(!root) ;
(root->_left);
(root->_right);
root;
root = ;
}
Node* _root;
};

