zoukankan      html  css  js  c++  java
  • LeetCode 701 二叉搜索树中的插入操作

    题目描述链接:https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/

    解题思路:此题要求完成二叉搜索树的插入操作,即给定一颗二叉搜索树以及一个节点值,要求将该节点值插入到

    二叉搜索树中去,并保证插入完成后的二叉搜索树依然是一颗二叉搜索树。基于此,对于树很容易想到其可能有两种

    基本解法。1.迭代法,进行插入。2.递归插入。

    1.迭代法。对于迭代,只需判断当前指针和要插入节点值得大小,大于走右子树,小于走左子树,一直到当前指针为空,那么

    就插入到当前的前一指针的左孩子(小于)或右孩子(大于)。

    2.递归操作。如当前指针不为空,并且插入节点大于当前节点值,向当前指针的右子树进行插入,并更改其右子树。如果插入节点

    小于当前节点值,向当前指针的左子树进行插入,并更改其左子树。

    基于上述两种方法的解题代码如下:

    1.迭代法:

    /**
     * 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* insertIntoBST(TreeNode* root, int val) {
    
            TreeNode *p=root;
            TreeNode *pre;
    
            while(p){
                if(val>p->val){
                    pre=p;
                    p=p->right;
                }
                else{
                    pre=p;
                    p=p->left;
                }
            }
            TreeNode *temp=new TreeNode(val);
            if(val>pre->val){
                
                pre->right=temp;
            }
            else{
                pre->left=temp;
            }
    
            if(!root){
                return temp;
            }
    
            return root;
        }
    }

    2.递归法

    /**
     * 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* insertIntoBST(TreeNode* root, int val) {
            if(root==NULL){
                 TreeNode *temp=new TreeNode(val);
                 return temp;
            }
            
             if(val>root->val){
                root->right=insertIntoBST(root->right,val);
             }
             else{
                root->left=insertIntoBST(root->left,val);
             }
             return root;
        }
    };
  • 相关阅读:
    GBPR: Group Preference Based Bayesian Personalized Ranking for One-Class Collaborative Filtering-IJACA 2013_20160421
    BPR: Bayesian Personalized Ranking from Implicit Feedback-CoRR 2012——20160421
    基于矩阵分解的推荐算法
    svmlight使用说明
    论文笔记Outline
    Libliner 中的-s 参数选择:primal 和dual
    查询日志方法
    集合 Vector ArrayList 集合一
    c语言 常用知识点
    简单的c语言小程序 回光返照
  • 原文地址:https://www.cnblogs.com/zzw-/p/13755087.html
Copyright © 2011-2022 走看看