二叉搜索树的递归查找与插入均基于BST性质:1.查找时,空节点返回nullptr,相等则返回节点,否则按大小关系递归左右子树;2.插入时,空位置新建节点,否则递归插入并更新子指针,最后返回当前节点。

一、查找节点的递归实现原理
在二叉搜索树中,查找目标值依赖于BST的结构性质:左子树所有节点值均小于根节点,右子树所有节点值均大于根节点。递归查找从根开始,根据当前节点值与目标值的大小关系决定向左或向右子树深入,直至匹配成功或抵达空节点。
1、若当前节点为空,则返回空指针,表示未找到目标值。
2、若当前节点的值等于目标值,则返回该节点指针。
3、若目标值小于当前节点值,则递归调用查找函数处理左子树。
4、若目标值大于当前节点值,则递归调用查找函数处理右子树。
二、插入节点的递归实现原理
插入操作需维持BST性质,即新节点必须置于满足“左小右大”约束的叶子位置。递归插入通过比较待插值与当前节点值,确定插入方向;当遇到空位置时,直接构造新节点并返回其指针,逐层回溯更新子树链接。
1、若当前节点为空,则创建新节点并初始化为待插入值,返回该节点指针。
2、若待插入值小于当前节点值,则将递归插入结果赋给当前节点的左子节点指针。
3、若待插入值大于当前节点值,则将递归插入结果赋给当前节点的右子节点指针。
4、返回当前节点指针,保持父级子树结构完整。
三、节点定义与基础结构声明
所有递归操作均基于统一的节点结构。每个节点包含整型数据域、指向左右子节点的指针。BST类封装根节点指针及对外接口,内部递归函数设为私有成员以避免外部误调用。
1、定义结构体 TreeNode,含 val、left、right 三个成员。
2、BST类中声明私有成员 root,类型为 TreeNode*。
3、声明公有接口 search(int val) 和 insert(int val),分别调用对应私有递归函数。
四、查找函数的完整递归实现
对外接口 search 调用私有辅助函数 searchRecursive,后者执行实际递归逻辑。该函数不修改树结构,仅遍历并返回匹配节点地址或空指针。
1、在 BST 类中定义私有函数 TreeNode* searchRecursive(TreeNode* node, int val)。
2、函数内首先判断 node == nullptr,成立则返回 nullptr。
3、接着判断 node->val == val,成立则返回 node。
4、否则根据 val val 决定递归调用左子树或右子树。
五、插入函数的完整递归实现
对外接口 insert 同样委托给私有递归函数 insertRecursive,该函数返回更新后的子树根指针,确保父节点能正确接收新子树根。
1、在 BST 类中定义私有函数 TreeNode* insertRecursive(TreeNode* node, int val)。
2、函数内首先处理 node == nullptr 情况,新建节点并返回。
3、若 val val,则执行 node->left = insertRecursive(node->left, val)。
4、若 val > node->val,则执行 node->right = insertRecursive(node->right, val)。
5、最后返回 node,完成当前层级的子树链接维护。
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











