Skip to content

代码随想录 二叉树:二叉搜索树中的插入

题目描述

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]

题目链接:701

文章讲解:701

思考

示例中给了两种插入方式,我们选择第一种。

按照预定的方向遍历,遍历到空节点插入元素即可

递归三部曲

1、确定递归函数返回值和参数

返回值是插入值之后的二叉搜索树根节点,参数是二叉搜索树根节点

2、终止条件

遇到空节点时,构造value节点然后返回该节点。即这颗空节点的二叉搜索树就就变成了插入该value值节点的二叉搜索树了

3、递归条件

按照预定方向递归,返回插入值之后的二叉搜索树。

如,遍历节点小于value,那么应该在其右子树上进行插值,将插入该值后的右子树设置为遍历节点的右子树。

最终返回当前遍历节点。

代码实现

C++
class Solution {
public:
    TreeNode* insertIntoBST(TreeNode* root, int val) {
        if(root == nullptr) {
            TreeNode* node = new TreeNode(val);
            return node;
        } else if(root->val < val){
            root->right = insertIntoBST(root->right,val);
        } else if(root->val > val){
            root->left = insertIntoBST(root->left,val);
        }
        return root;
    }
};