二叉搜索树:高效查找与插入

二叉搜索树的基本概念

二叉搜索树(Binary Search Tree, BST)是一种特殊的二叉树,满足以下性质:

  • 左子树所有节点的值小于根节点的值。
  • 右子树所有节点的值大于根节点的值。
  • 左右子树也分别为二叉搜索树。

这种结构使得查找、插入和删除操作的时间复杂度为 O(h),其中 h 是树的高度。理想情况下,BST 是平衡的,此时 h = log(n),n 为节点数。

二叉搜索树的节点定义

二叉搜索树的节点通常包含三个部分:

  • 数据域(存储值)。
  • 左子节点指针。
  • 右子节点指针。

以下是 C++ 中的节点定义示例:

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

二叉搜索树的插入操作

插入操作需要遵循 BST 的性质:

  • 若当前节点为空,直接创建新节点。
  • 若插入值小于当前节点值,递归插入左子树。
  • 若插入值大于当前节点值,递归插入右子树。

以下是插入操作的实现:

TreeNode* insert(TreeNode* root, int val) {
    if (!root) return new TreeNode(val);
    if (val < root->val) root->left = insert(root->left, val);
    else if (val > root->val) root->right = insert(root->right, val);
    return root;
}

二叉搜索树的查找操作

查找操作通过比较目标值与当前节点值决定搜索方向:

  • 若当前节点为空,返回空。
  • 若目标值等于当前节点值,返回当前节点。
  • 若目标值小于当前节点值,递归查找左子树。
  • 若目标值大于当前节点值,递归查找右子树。

以下是查找操作的实现:

TreeNode* search(TreeNode* root, int val) {
    if (!root || root->val == val) return root;
    if (val < root->val) return search(root->left, val);
    return search(root->
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值