二叉搜索树的基本概念
二叉搜索树(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->
1万+

被折叠的 条评论
为什么被折叠?



