leetcode 701二叉搜索树中的插入操作

简介: leetcode 701二叉搜索树中的插入操作

二叉搜索树中的插入操作

d2b9a5765b0d423f838af885d3a27e71.png

递归插入

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    void find_node(TreeNode* cur, int val)
    {
        if(cur==nullptr) return ; 
        //当前值大于目标值,插入左子树
        if(cur->val > val ) 
        {
          //找到空点,插入         .
            if(cur->left == nullptr)
            {
                TreeNode* new_node = new TreeNode(val);
                cur->left = new_node;
            }else
            {
                find_node(cur->left , val);
            }
        }
        //当前值小于目标值,插入右子树
        else if(cur->val <val )  
        {
          //找到空点,插入
             if(cur->right == nullptr)
            {
                TreeNode* new_node = new TreeNode(val);
                cur->right = new_node;
            }else
            {
                find_node(cur->right , val);
            }
        }
    }
    TreeNode* insertIntoBST(TreeNode* root, int val) {
      //如果根节点是空的,设置新点作为根
        if(root==nullptr ) 
        {
             TreeNode* new_node = new TreeNode(val);
             return new_node;
        }
        else//如果根节点是非空,插入
        {
            find_node(root , val);
            return root;
        }
    }
};

二刷

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* track_back(TreeNode* cur, int val)
    {
        if(cur == nullptr)
        {
            TreeNode *node = new TreeNode(val);
            return node;
        }
        if(cur->val > val) cur->left = track_back(cur->left , val);
        if(cur->val < val) cur->right = track_back(cur->right ,val);
        return cur;
    }
    TreeNode* insertIntoBST(TreeNode* root, int val) {
        return track_back(root,val);
    }
};
相关文章
|
2月前
【LeetCode 45】701.二叉搜索树中的插入操作
【LeetCode 45】701.二叉搜索树中的插入操作
11 1
|
2月前
【LeetCode 44】235.二叉搜索树的最近公共祖先
【LeetCode 44】235.二叉搜索树的最近公共祖先
19 1
|
6月前
|
机器学习/深度学习 存储 算法
LeetCode 题目 95:从递归到动态规划实现 不同的二叉搜索树 II
LeetCode 题目 95:从递归到动态规划实现 不同的二叉搜索树 II
|
2月前
【LeetCode 48】108.将有序数组转换为二叉搜索树
【LeetCode 48】108.将有序数组转换为二叉搜索树
43 0
|
2月前
【LeetCode 47】669.修剪二叉搜索树
【LeetCode 47】669.修剪二叉搜索树
11 0
|
2月前
【LeetCode 46】450.删除二叉搜索树的节点
【LeetCode 46】450.删除二叉搜索树的节点
21 0
|
2月前
【LeetCode 42】501.二叉搜索树中的众数
【LeetCode 42】501.二叉搜索树中的众数
10 0
|
2月前
【LeetCode 41】530.二叉搜索树的最小绝对差
【LeetCode 41】530.二叉搜索树的最小绝对差
13 0
|
2月前
【LeetCode 40】98.验证二叉搜索树
【LeetCode 40】98.验证二叉搜索树
16 0
|
2月前
【LeetCode 39】700.二叉搜索树中的搜索
【LeetCode 39】700.二叉搜索树中的搜索
16 0