概述
二叉搜索树(Binary Search Tree,BST)是计算机科学中经典的树形数据结构。它利用'左子树值≤根节点值≤右子树值'的结构性约束,实现了高效的动态查找、插入和删除操作。在理想平衡状态下,这些操作的时间复杂度可控制在 O(logN);而在最坏的单支树场景下,则退化为 O(N)。
C++ 标准库中的 map、set、multimap、multiset 等关联式容器,其核心逻辑正是基于二叉搜索树构建(红黑树作为其平衡优化版本)。本文将拆解节点设计、树的构建及核心操作的实现逻辑,涵盖'仅存关键码'与'键值对'两种典型应用场景,并给出完整的 C++11 代码示例。
性能分析
- 最好情况:树的结构接近完全二叉树,高度为 logN,此时查找、插入、删除操作的时间复杂度为 O(logN)。
- 最坏情况:树退化为单支树,高度为 N,此时操作的时间复杂度退化为 O(N)。

核心实现
节点定义
二叉搜索树本质是由节点连接而成的链式结构。每个节点包含关键码、左孩子指针和右孩子指针。
#pragma once
#include <iostream>
using namespace std;
// 二叉搜索树节点结构
template <class K>
struct BSTNode {
K _key; // 节点存储的关键码
BSTNode<K>* _left; // 左孩子节点指针
BSTNode<K>* _right; // 右孩子节点指针
// 构造函数:初始化节点
BSTNode(const K& key) : _key(key), _left(nullptr), _right(nullptr) {}
};
类封装
将二叉搜索树封装为类,根节点作为私有成员以保证数据封装性。使用 C++11 的 using 简化节点类型名。
template <class K>
class BSTree {
Node = BSTNode<K>;
:
;
;
;
;
:
_InOrder(Node* root);
Node* _root = ;
};

