首页 > 其他分享 >代码随想录Day22-Leetcode235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点

代码随想录Day22-Leetcode235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450.删除二叉搜索树中的节点

时间:2023-04-06 23:12:36浏览次数:51  
标签:right return val root 二叉 搜索 null 树中 left

235. 二叉搜索树的最近公共祖先

题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/
又玩了一天,手又生疏了好多;
这道题看了题解,先用公共解法了,之前的题没刷,就给现在留坑了

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */

/**
 * @param {TreeNode} root
 * @param {TreeNode} p
 * @param {TreeNode} q
 * @return {TreeNode}
 */
 //递归:搜索左子树,搜索右子树,若都搜索到结果即使自己(暂时不考虑自身)
 //暂且不考虑二叉搜索树性质
var lowestCommonAncestor = function(root, p, q) {
    if(root == null||root == p||root == q){
        return root
    }
    let lResult = lowestCommonAncestor(root.left,p,q)
    let rResult = lowestCommonAncestor(root.right,p,q)
    if(lResult !=null&&rResult!=null){
        return root
    }else if(lResult!=null){
        return lResult
    }else if(rResult!=null){
        return rResult
    }
    else{
        return null
    }
};
//犯错:审题出错,把,p,q当成值而非结点;

看了文章后,发现可以直接利用性质,第一个到区间中央的就是了
虽然,后面看了文章代码后发现只用遍历一条边就够了,还是不够高效

var lowestCommonAncestor = function(root, p, q) {
    if(root == null){
        return root
    }
    if(root.val>=Math.min(p.val,q.val)&&root.val<=Math.max(p.val,q.val)){
        return root
    }
    let lResult = lowestCommonAncestor(root.left,p,q)
    if(lResult!=null){
        return lResult
    }
    let rResult = lowestCommonAncestor(root.right,p,q)
    if(rResult!=null){
        return rResult
    }
    
    return null
};

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

题目链接:https://leetcode.cn/problems/insert-into-a-binary-search-tree/
递归是很显然的,小于,插不进去就插左子树,大于同理

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} val
 * @return {TreeNode}
 */
var insertIntoBST = function(root, val) {
    if(root == null){
        return new TreeNode(val)
    }
    if(val>root.val){
        if(root.right==null){
            root.right = new TreeNode(val)
        }else{
            insertIntoBST(root.right,val)
        }
    }else{
        if(root.left == null){
            root.left = new TreeNode(val)
        }else{
            insertIntoBST(root.left,val)
        }
    }
    return root
};
//错误:经典递归忘参数

450.删除二叉搜索树中的节点

题目链接:https://leetcode.cn/problems/delete-node-in-a-bst
这个看了题解
没想到可以把左子树直接接到右子树的最左边
递归返回根节点引用也很巧妙

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} key
 * @return {TreeNode}
 */
 //看了题解,五种情况:
 //没找到
 //左右孩子为空:直接删
 //左/右孩子为空,用那一个取代
 //左右孩子都不为空:将左孩子放在右孩子的最左面节点的左孩子上
var deleteNode = function(root, key) {
    if(root == null){
        return null
    }
    if(key == root.val){
        if(root.left==null){
            return root.right
        }else if(root.right == null){
            return root.left
        }else{
            let p  = root.right;
            while(p.left!=null){
                p = p.left
            }
            p.left = root.left
            return root.right
        }
    }else{
        root.left = deleteNode(root.left,key)
        root.right = deleteNode(root.right,key)
    }
    return root
};

标签:right,return,val,root,二叉,搜索,null,树中,left
From: https://www.cnblogs.com/herbert118/p/17294566.html

相关文章

  • 1145. 二叉树着色游戏
    题目链接:1145.二叉树着色游戏方法:分类解题思路(1)\(x\)节点将二叉树分成了\(3\)部分,分别是父节点子树、左子树、右子树(节点数分别为n1n2n3);(2)为了使得二号玩家染色尽可能的多,应该让\(y\)选择在\(x\)相邻的节点。若存在以下一种情况,则二号玩家稳赢,n1>n2+n3+1||......
  • 高德地图搜索结果如何导出成excel里?
    地图搜索左边查询的商家如何导出到EXCEL里?解决销售人员一个一个从地图上翻找复制客户信息的低下效率、销售人员就应该专心去做他们擅长的业务营销!经过一段时间的琢磨,经过长时间的反复测试,做出了导出地图商家电话到EXCEL里的系统  操作步骤:1.选择你要采集的省份,城市列表......
  • 23.04.06_blog能被搜索到
    博客优化内容对于刚建立的博客来说,谷歌往往不能或者不会收录你的博客,为了使自己的博客可以被谷歌所检索到。我们需要主动向谷歌提供网址信息。提交到百度搜索访问百度搜索资源平台官网,注册或者登陆百度账号,依次选择用户中心-->站点管理输入你的网站,协议头推荐是https协议的......
  • 257. 二叉树的所有路径
    给定一个二叉树,返回所有从根节点到叶子节点的路径。说明:叶子节点是指没有子节点的节点。classSolution{private:voidtraversal(TreeNode*cur,stringpath,vector<string>&res){path+=std::to_string(cur->val);if(cur->left==nullptr&......
  • 搜索引擎优化教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介什么是SEO和SEO文案-一个关于搜索引擎优化(SEO)入门教程,以了解什么是SEO和各种SEO工具和技术,包括白帽黑帽Spamdexing和Meta标签关键词主题标题超链接图像网页优化和搜索引擎抓取索引处理相关性计算结果检索隐藏元标记填充门口网关页面劫持搜索引擎优化,又称为SEO,即Searc......
  • 谷歌seo搜索留痕揭秘:如何轻松管理与保护您的在线足迹?
    在数字时代,我们的在线足迹比以往任何时候都更加重要。为了保护我们的在线隐私和安全,我们需要了解如何使用谷歌SEO搜索留痕功能。在本文中,我将分享我的个人经历,并介绍使用谷歌搜索留痕的好处。去年,我开始关注个人隐私和网络安全问题,尤其是与我的在线足迹有关的问题。我意识到我需要......
  • 树:剑指 Offer 68 - II. 二叉树的最近公共祖先
    题目描述:给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个结点p、q,最近公共祖先表示为一个结点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root= ......
  • 1688关键字搜索新品数据API接口(item_search_new-按关键字搜索新品数据)
    1688关键字搜索新品数据API接口(item_search_new-按关键字搜索新品数据)代码接口教程如下:公共参数名称类型必须描述key String 是 调用key(必须以GET方式拼接在URL中)secret String 是 调用密钥api_name String 是 API接口名称(包括在请求地址中)[item_search,item_get,item_search......
  • 树:剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
    题目描述:给定一个二叉搜索树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个结点p、q,最近公共祖先表示为一个结点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root......
  • 树:剑指 Offer 55 - II. 平衡二叉树
    题目描述:输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。示例1:  示例2:  限制:0<=树的结点个数<=10000 方法基于以下性质推出: 此树的深度 等于 左子树的深度 与 ......