力扣701二叉搜索树中的插入操作(c++)

力扣701二叉搜索树中的插入操作(c++)

力扣题目链接

思路

如果我们不考虑题目中提示所说的改变树的结构的插入方式。那么这道题目就是一道简单题。
我们只要按照二叉搜索树的规则去遍历,遇到空节点就插入节点。那么这道题就会很简单。
例如插入元素10 ,需要找到末尾节点插入便可,一样的道理来插入元素15,插入元素0,插入元素6,需要调整二叉树的结构么? 并不需要。。
只要遍历二叉搜索树,找到空节点 插入元素就可以了。
力扣701二叉搜索树中的插入操作(c++)_第1张图片
递归三部曲:
1、确定递归函数参数以及返回值
参数就是根节点指针,以及要插入元素,这里递归函数要不要有返回值呢?
可以有,也可以没有,但递归函数如果没有返回值的话,实现是比较麻烦的。
有返回值的话,可以利用返回值完成新加入的节点与其父节点的赋值操作。
递归函数的返回类型为节点类型TreeNode * 。
代码如下:

TreeNode* insertIntoBST(TreeNode* root, int val)

2、确定终止条件
终止条件就是找到遍历的节点为null的时候,就是要插入节点的位置了,并把插入的节点返回。
代码如下:

if (root == NULL) {
    TreeNode* node = new TreeNode(val);
    return node;
}

这里把添加的节点返回给上一层,就完成了父子节点的赋值操作了,详细再往下看。
3、确定单层递归的逻辑
我们不需要遍历整棵树,搜索树是有方向的,可以根据插入元素的数值,决定递归方向。
代码如下:

if (root->val > val) root->left = insertIntoBST(root->left, val);
if (root->val < val) root->right = insertIntoBST(root->right, val);
return root;

整体代码

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

代码运行结果
力扣701二叉搜索树中的插入操作(c++)_第2张图片

你可能感兴趣的:(leetcode,c++,leetcode,算法)