• 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;
        }
    };
  • 相关阅读:
    NET中的幕后英雄:MSCOREE.DLL (转载)
    【百度地图API】如何使用suggestion下拉列表方式的搜索建议
    经典收藏 50个jQuery Mobile开发技巧集萃
    深入理解Android消息处理系统——Looper、Handler、Thread
    Android GridView宫格视图(一) 运用BaseAdapter
    Toast和Handler的间隔使用
    android Toast大全(五种情形)建立属于你自己的Toast
    SQL 新特性 output
    通过Aspose.Cells.dll组件,实现多sheet导出Xls
    SQL 通过镜像数据库实现 故障自动切换
  • 原文地址:https://www.cnblogs.com/zzw-/p/13755087.html
Copyright © 2020-2023  润新知