代码随想录第18天 | 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先

news2024/11/25 14:57:44

530.二叉搜索树的最小绝对差

           var getMinimumDifference = function (root) {
            //中序遍历法:左中右
            let res = []
            if (!root) return res;
            const st = [root] //栈,pop(),push()
            while (st.length) {
                let x = st.pop()
                if (!x) {
                    res.push(st.pop().val)
                    continue
                }
                if (x.right) st.push(x.right)
                st.push(x)
                st.push(null)
                if (x.left) st.push(x.left)
            }//中序遍历先把res求出来,然后求出相邻最小值
            let m = 100000
            for (let i = 1; i < res.length; i++) {
                m = (m <= Math.abs(res[i] - res[i - 1]) ? m : Math.abs(res[i] - res[i - 1]))
            }
            return m
        };

思想

中序遍历,二叉搜索树转换成有序数组,然后遍历一遍数组,就统计出来最小差值了。
在这里插入图片描述

在过程中记录

var getMinimumDifference = function (root) {
             //中序遍历法:左中右
    // let res=[]
    if(!root) return 0;
    let pre
    let cur
    let m=53453434
    const st=[root] //栈,pop(),push()
    while(st.length){
        let x = st.pop()  
        if(!x){  //如果x为null
            cur = st.pop().val
            m=(m<=Math.abs(cur-pre)?m:Math.abs(cur-pre))
            pre = cur
            continue
        }
        if(x.right) st.push(x.right)
        st.push(x)
        st.push(null)
        if(x.left) st.push(x.left)
    }
    return m
        };

重点

cur = st.pop().val
m=(m<=Math.abs(cur-pre)?m:Math.abs(cur-pre))
pre = cur
cur和pre

501.二叉搜索树中的众数

  /**
 * 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
 * @return {number[]}
 */
        var findMode = function (root) {
            let mapObj = new Map();
            if (!root) return [];
            if (!root.left && !root.right) return [root.val]
            let x = root
            let st = []
            while (st.length || x) { //只要有一个条件成立
                while (x) {   //一直把左边的孩子扫入,注意条件,先判断x是否为null,然后在x=x.left(即进入循环的x一定有左孩子
                    st.push(x)
                    x = x.left
                }
                //左孩子没了,弹出中
                x = st.pop()
                mapObj.set(x.val, (mapObj.get(x.val) || 0) + 1)
                //把右当做根节点
                x = x.right
            }

            let c = Math.max(...mapObj.values())//得到最大值
            mapObj = [...mapObj]
            let res = []
            for (let i = 0; i < mapObj.length; i++) {
                if (mapObj[i][1] === c)
                    res.push(mapObj[i][0])
            }
            return res
        };

第一想法

就是遍历(随便用什么方法(迭代,调用都行)),map存储,然后找到最大值,for循环找到,这种方法,真的是很烂了,没有运用搜索树的性质。
我用的是中序迭代,但我这种方法没有用。但中序出来的数组是有顺序的

接下来是卡哥的做法(慢慢体会吧):

var findMode = function(root) {
    // 不使用额外空间,使用中序(左中右)遍历,设置出现最大次数初始值为1  
    let count = 0,maxCount = 1;
    let pre = root,res = [];
    // 1.确定递归函数及函数参数
    const travelTree = function(cur) {
        // 2. 确定递归终止条件
        if(cur === null) {
            return ;
        }
        travelTree(cur.left);
        // 3. 单层递归逻辑
        if(pre.val === cur.val) {
            count++;   
        }else {
            count = 1;
        }
        pre = cur;  //cur是新来的
        if(count === maxCount) {
            res.push(cur.val);
        }
        if(count > maxCount) {
            res = [];   //清空res,我之前想的是pop,感觉不行,遂放弃
            maxCount = count;
            res.push(cur.val);
        }
        travelTree(cur.right);
    }
    travelTree(root);
    return res;
};

236. 二叉树的最近公共祖先

var lowestCommonAncestor = function(root, p, q) {
    // 使用递归的方法
    // 需要从下到上,所以使用后序遍历
    // 1. 确定递归的函数
    const travelTree = function(root,p,q) {
        // 2. 确定递归终止条件
        if(root === null || root === p || root === q) { //1 5 6 节点
            return root;
        }
        // 3. 确定递归单层逻辑
        let left = travelTree(root.left,p,q);
        let right = travelTree(root.right,p,q);
        if(left !== null && right !== null) {  //7节点返回7
            return root;
        }
        if(left === null) {  //10节点
            return right;
        }
        return left;  //8  4  15 20节点
    }
   return  travelTree(root,p,q);
};

第一想法

后序(左右中)递归遍历,想的是找到一个l=true,找到另一个r=true,然后记录,马上结束,看了解析,好像不能

思想

在这里插入图片描述

+回溯

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/424263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux环境下搭建composer私服及memory_limit问题

Composer是 PHP项目中用来管理依赖&#xff08;dependency&#xff09;关系的工具&#xff0c;允许声明项目所依赖的代码库 &#xff0c;然后在项目的某个目录中(默认是vendor目录) 中安装相关的依赖包。 在介绍如何安装私服之前&#xff0c;我们先熟悉下 composer 相关 compo…

对话框与子窗口控件(写给大忙人看的快速复习掌握)

对话框与子窗口控件&#xff08;写给大忙人看的快速复习掌握&#xff09;1、对话框的概念2、控件的概念我更喜欢称控件为预定义的窗口类3、我们一步一步写代码熟悉常用的预定义的窗口类3.1 什么叫模板呢&#xff1f;3.2 什么是资源文件4、消息处理函数&#xff08;有这么几个消…

护眼灯哪些牌子好?2023护眼灯品牌推荐

护眼灯就是保护眼睛的&#xff0c;很多人长时间工作和学习&#xff0c;主要还是光的刺激和错误的坐姿&#xff0c;会引起眼睛的近视&#xff0c;导致视觉疲劳的主要原因就是灯光的频闪&#xff0c;而护眼灯就能很好减少频闪。 特别是青少年们的视力发育为成熟&#xff0c;视力…

使用Sentieon加速甲基化WGBS数据分析

全基因组甲基化测序(WGBS)是一种研究DNA甲基化的方法&#xff0c;以全面了解在基因组水平上的表观遗传变化。在进行WGBS数据分析时&#xff0c;通常需要使用专门的比对工具&#xff0c;因为这些工具需要能够处理亚硫酸盐转化后的数据。 以下是四个不同的WGBS比对分析流程&…

ADIDAS阿里纳斯励志广告语

系列文章目录 精选优美英文短文1——Dear Basketball&#xff08;亲爱的篮球&#xff09;精选优美英文短文2——Here’s to the Crazy Ones&#xff08;致疯狂的人&#xff09;“我祝你不幸并痛苦”——约翰罗伯茨毕业致辞“亲爱的波特兰——CJ麦科勒姆告别信” Hi, I’m Gilb…

七、Django进阶:第三方库Django-extensions的开发使用技巧详解(附源码)

Django-extensions是 Django 的扩展应用&#xff0c;给django开发者提供了许多便捷的扩展工具(extensions)&#xff0c;它提供了许多有用的工具和命令行工具&#xff0c;帮助 Django 开发者更高效地进行开发和调试。它的作用包括&#xff1a; - 提供了更多的Django命令&#x…

循环依赖详解及解决方案

介绍 上图就是循环依赖的三种情况,虽然方式不同,但是循环依赖的本质是一样的,就A的完整创建要依赖与B,B的完整创建要依赖于A,相互依赖导致没办法完整创建造成失败. 循环依赖代码演示 public class Demo {public static void main(String[] args) {new Demo1();} }class Demo1…

电子信息工程有哪些SCI期刊推荐? - 易智编译EaseEditing

以下是电子信息工程领域的一些SCI期刊推荐&#xff1a; IEEE Transactions on Information Theory&#xff1a; 该期刊由IEEE出版&#xff0c;专注于信息理论领域的研究&#xff0c;包括编码理论、信道编码、信息传输、信息论应用等方面的研究。 IEEE Transactions on Signal…

Apache网页与安全优化

系列文章目录 文章目录系列文章目录一、1.构建虚拟web主机2.一、基于域名的虚拟主机二、Apache 日志分割1.三、Apache的网页优化总结一、 1.构建虚拟web主机 虚拟Web主机指的是在同一台服务器中运行多个Web站点&#xff0c;其中每一个站点实际上并不独立占用整个服务器&#…

天选姬 - 桌面宠物

天选姬 - 桌面宠物前言下载使用更新设置右键菜单人机交互系统状态闹钟壁纸前言 桌面宠物顾名思义指在电脑桌面的宠物&#xff0c;可以是各种动物或Q版人物。可以进行交互并拥有各种各样的功能&#xff0c;本文介绍一款适用于各种电脑的桌面宠物&#xff0c;天选姬&#xff0c;…

【Redis-面试题及持久化方案】Redis相关面试题(缓存穿透、缓存击穿、缓存血崩) Redis两种持久化方案详情对比(RDB、AOF)

【Redis-面试题及持久化方案】Redis相关面试题&#xff08;缓存穿透、缓存击穿、缓存血崩&#xff09; & Redis两种持久化方案详情对比&#xff08;RDB、AOF&#xff09;1&#xff09;Redis 面试题1.1.高频面试题&#xff1a;缓存穿透、缓存击穿、缓存血崩1.2.低频面试题&a…

电脑0X000000D1蓝屏错误U盘重新安装系统教学

电脑0X000000D1蓝屏错误U盘重新安装系统教学。最近有用户遇到了电脑桌面变成了0X000000D1错误代码的蓝屏界面了&#xff0c;无法继续操作使用。那么这个问题怎么去进行系统U盘重装呢&#xff1f;来看看以下的详细解决方法吧。 准备工作&#xff1a; 1、U盘一个&#xff08;尽量…

智慧城市我国发展现状怎样?

智慧城市从概念提出到落地实践&#xff0c;历经十多年的建设与发展&#xff0c;我国智慧城市建设数量持续增长。我国智慧城市整体建设和发展情况总结如下。 北京智汇云舟科技有限公司成立于2012年&#xff0c;专注于创新性的“视频孪生(实时实景数字孪生)”技术研发与应用。目前…

江南爱窗帘十大品牌,怎么合理的搭配窗帘配色

窗帘行业圈&#xff1a;窗帘行业内部交流圈&#xff0c;窗帘从业者的交流内部圈。 当阳光照进房间的那一刻&#xff0c; 光线给空间带来了无限的可能。 窗边的帘帐既是美丽的风景 又是可爱的魔术师。 在光影变幻的时空里 让你的生活布满温馨和奇幻。 1.窗帘材质怎么选 窗帘的材…

DataSecurity Plus如何阻止数据泄露

随着互联网的发展&#xff0c;数据泄露事件时有发生&#xff0c;给个人和企业造成了巨大的损失。为了保护数据安全&#xff0c;企业需要采取一系列的安全措施&#xff0c;而其中一项重要的措施就是使用数据安全工具。DataSecurity Plus 是一款功能强大的数据安全工具&#xff0…

苹果AirPods耳机推送新固件更新,TWS耳机与Find My可实现智能防丢

苹果推送 iOS / iPadOS 16.5 Beta 2 更新的同时&#xff0c;原本还为 AirPods 耳机推送了固件更新 5E133。苹果在临时撤回之后&#xff0c;再次向用户推送了本次更新&#xff0c; 苹果官方表示当你的 AirPods 在充电且在 iPhone、iPad 或 Mac 的蓝牙通信范围内时&#xff0c;…

【LeetCode:(每日一题1023. 驼峰式匹配) -> 剑指 Offer II 097. 子序列的数目 | 暴力递归=>记忆化搜索=>动态规划】

&#x1f34e;作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域新星创作者&#x1f3c6;&#xff0c;保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享&#x1f48e;&#x1f48e;&#x1f48e; &#x1f34e;座右…

iOS 吸顶效果

项目中&#xff0c;在列表向上滚动时&#xff0c;有时需要将某个控件置顶&#xff0c;这就是我们常见的吸顶效果。 1. UITableView 吸顶效果 UITableView是自带吸顶效果&#xff0c;我们把需要置顶的控件设置为SectionHeaderView&#xff0c;这样在滚动时&#xff0c;该控件会…

360城市全景,开启全新城市探索方式

引言 360城市全景技术的出现和发展&#xff0c;让我们的生活方式和观念发生了革命性的变化。在过去&#xff0c;我们只能通过实地旅行、图片和视频来了解不同城市的文化、建筑和风景。现在&#xff0c;通过360城市全景技术&#xff0c;我们可以像亲临现场一样&#xff0c;透过…

Vue实现自动化平台(四)--接口管理页面的实现

上一章&#xff1a; Vue实现自动化平台&#xff08;三&#xff09;_做测试的喵酱的博客-CSDN博客 github地址&#xff1a;https://github.com/18713341733/vuemiaotest 这个目前只是用来练手的&#xff0c;项目还没成型。等以后我写完了&#xff0c;再更新一下项目链接。 …