C++ 模拟实现二叉搜索树
二叉搜索树(Binary Search Tree,BST)是计算机科学中经典的树形结构,凭借高效的动态查找、插入和删除特性被广泛应用。C++ 标准库中的 map、set、multimap、multiset 等关联式容器,其核心逻辑正是基于二叉搜索树构建(红黑树作为其平衡优化版本)。
BST 的核心价值在于利用'左子树值≤根节点值≤右子树值'的结构性约束,将操作的时间复杂度控制在近似 O(logN)。当然,最坏情况下退化为单支树时复杂度会变为 O(N),这也是后续引入平衡树的原因。下面我们从定义出发,逐步拆解节点设计、树的构建及核心操作的实现。
一、二叉搜索树的概念
二叉搜索树又称二叉排序树,需满足以下核心特性:
- 若左子树不为空,则左子树上所有节点的值都小于等于根节点的值
- 若右子树不为空,则右子树上所有节点的值都大于等于根节点的值
- 左右子树也分别为二叉搜索树
支持插入相同值的场景对应 multimap/multiset,不支持的对应 map/set。

二、性能分析
- 最好情况:树的结构接近完全二叉树,高度为 logN,此时查找、插入、删除操作的时间复杂度为 O(logN)。
- 最坏情况:树退化为单支树,高度为 N,此时操作的时间复杂度退化为 O(N)。

三、整体框架与实现
1. 节点设计
BST 本质是由节点连接而成的链式结构,每个节点包含关键码、左孩子指针、右孩子指针。使用 C++11 语法简化类型定义:
#pragma once
#include <iostream>
using namespace std;
// 二叉搜索树节点结构
template <class K>
struct BSTNode {
K _key; // 节点存储的关键码
BSTNode<K>* _left; // 左孩子节点指针
BSTNode<K>* _right; // 右孩子节点指针
// 构造函数:初始化节点
( K& key) : _key(key), _left(), _right() {}
};

