LeetCode:111.二叉树的最小深度

news/2025/1/12 16:49:18/文章来源:https://www.cnblogs.com/KooTeam/p/18667051

LeetCode:111.二叉树的最小深度

解题思路求最小深度,考虑使用广度优先遍历。在广度优先遍历过程中,遇到叶子节点,停止遍历,返回节点层级。

解题步骤广度优先遍历整棵树,并记录每个节点的层级。遇到叶子节点,返回节点层级,停止遍历。

//dfs
var minDepth = function(root) {if (!root) return 0;function dfs(node) {if (!node.left && !node.right) return 1; // 叶子节点,返回深度1let leftDepth = Infinity, rightDepth = Infinity;if (node.left) leftDepth = dfs(node.left);if (node.right) rightDepth = dfs(node.right);return Math.min(leftDepth, rightDepth) + 1;}return dfs(root);
};var minDepth = function(root) {if (!root) return 0;let queue = [[root, 1]];while(queue.length) {let [n,length]=queue.shift();if(!n.left&&!n.right) return length;if(n.left){queue.push([n.left,length+1])}if(n.right){queue.push([n.right,length+1])}}
};
// time 2ms   space 83.99mb  O(n)var minDepth = function(root) {if (!root) return 0;let queue = [{n:root,length:1}];while(queue.length) {let {n,length}=queue.shift();if(!n.left&&!n.right) return length;if(n.left){queue.push({n:n.left,length:length+1})}if(n.right){queue.push({n:n.right,length:length+1})}}
};
// time 4ms   space 83.96mb  O(n)// time 7ms space 85.56mb
var minDepth = function(root) {if (!root) return 0;let s=Symbol('root')let map=new Map()map.set(s,{n:root,length:1})let keylet n,lengthwhile(map.size>0) {key=Array.from(map.keys())[0]n=map.get(key).nlength=map.get(key).lengthmap.delete(key);if(!n.left&&!n.right) return length;if(n.left){map.set(Symbol(),{n:n.left,length:length+1})}if(n.right){map.set(Symbol(),{n:n.right,length:length+1})}}
};//time 10ms  space 83.66mb
var minDepth = function(root) {if (!root) return 0;let s=Symbol('root')let map=new Map()let weakMap=new WeakMap()weakMap.set(s,{n:root,length:1})map.set(s,weakMap)let keylet n,lengthwhile(map.size>0) {key=Array.from(map.keys())[0];n=map.get(key).get(key).n;length=map.get(key).get(key).length;map.delete(key);weakMap.delete(key);if(!n.left&&!n.right) return length;if(n.left){let l=Symbol();map.set(l,weakMap.set(l,{n:n.left,length:length+1}))}if(n.right){let r=Symbol();map.set(r,weakMap.set(r,{n:n.right,length:length+1}))}}map=nullweakMap=null
};//time 14ms  space 86mb
var minDepth = function(root) {if (!root) return 0;let minDepth = Infinity;function preorder(node, depth) {if (!node) return;// If it's a leaf nodeif (!node.left && !node.right) {minDepth = Math.min(minDepth, depth);}preorder(node.left, depth + 1);preorder(node.right, depth + 1);}preorder(root, 1);return minDepth;
};//只用map 和 一个symbol 不通过....error simple
//可能只能3个symbol----
var minDepth = function(root) {if (!root) return 0;let s = Symbol('node');let map = new Map();map.set(s, { node: root, depth: 1 });while (map.size > 0) {let { node, depth } = map.get(s);map.delete(s);if (!node.left && !node.right) {return depth;}if (node.left) {map.set(s, { node: node.left, depth: depth + 1 });}if (node.right) {// If left child exists, we need to process it firstif (!map.has(s)) {map.set(s, { node: node.right, depth: depth + 1 });}}}
};

6/3

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多光谱火焰智能监测摄像机

多光谱火焰智能监测摄像机将在未来继续发展。未来的摄像机可能会更加智能化,具备更强的自主识别和决策能力,进一步提升火灾监测的灵敏度和准确性。此外,随着物联网的发展,这些摄像机还有望与其他设备和系统实现更深入的数据共享和集成应用,为整个安全监控体系增添新的可能…

明火智能监测摄像机

明火智能监测摄像机检测到火源时,它会立即触发报警机制,以警告人员采取适当的行动。它可以与各种报警系统集成,发出清晰可闻的警报声,并通过网络将警报信息发送到相关部门或人员的手机应用程序,确保快速响应。明火智能监测摄像机全天候工作,不间断地监测环境中的火情。它…

山体滑坡自动监测识别摄像机

山体滑坡自动监测识别摄像机系统通过技术创新和智能化应用,为减少自然灾害带来的损失和风险提供了重要的技术手段和支持。随着技术的进步和系统的完善,相信这类系统将在全球范围内得到广泛应用,为社会公共安全和环境保护作出更大贡献。对于现代社会而言,山体滑坡作为自然灾…

水位智能监测识别摄像机

水位智能监测识别摄像机的应用前景十分广阔。未来,这些摄像机有望进一步提升监测精度和反应速度,扩展到更多复杂的水域环境和特殊应用场景中,为保障社会公共安全和生态环境做出更大贡献。总之,水位智能监测识别摄像机以其先进的技术和多功能性能,正在成为水域监测领域的重…

1.12 CW 模拟赛 T1. 括号序列

思路 根据赛时的检验, 典型的动点问题的 \(\rm{trick}\) 并不能在这里使用, 也就是说, 分类讨论前缀 + \(i\) + 后缀 前缀 + \(i\) 后缀 + \(i\)是不可行的 考虑括号串问题的常见做法, 先将其赋值成 \(1, -1\) 之后进行处理 你发现这种做法有枚举字段和的瓶颈, 所以也不可行 当…

【Docker】Docker搭建一款开源的RAG聊天应用

项目介绍 Kotaemon是一个由Cinnamon开发的开源项目,旨在提供一个基于检索增强生成(RAG)技术的用户界面,使用户能够与自己的文档进行交互问答。 功能特点 文档问答:Kotaemon允许用户通过自然语言查询与文档进行交互,快速获取所需信息。这一功能在学术研究、企业文档管理等…

客梯自动监测识别摄像机

客梯自动监测识别摄像机通过技术创新和智能化应用,为现代城市客梯的安全管理提供了全新的解决方案。随着技术的不断进步和应用场景的扩展,相信这类系统将在全球范围内得到广泛应用,为乘客的安全出行和客梯运行的高效管理提供更加可靠的保障和支持。当今社会,随着城市建设的…

【Docker】Docker搭建一款开源的加密货币量化交易平台

项目介绍 Freqtrade是一个开源的加密货币量化交易平台,它允许用户通过编写和配置交易策略来自动化交易过程。 功能特点 开源性:Freqtrade的代码是开源的,这意味着用户可以查看、修改和扩展平台的功能。 自动化交易:通过配置交易策略,Freqtrade可以自动执行买卖操作,无需人…

高级数据结构与算法---莫队

这篇文章主要是用来复习的,最近学了一些新的东西,多少要记录一下,不然以后忘了,不过似乎树状数组和ST表还没有补完,等后面有时间(不能拖拉)再去将他们给写完,然后就开始去学习一下计算几何,树形DP以及图论,啊啊啊啊啊啊,还要准备数学建模,哎,为什么明明都放假了,…

AT_abc388_f Dangerous Sugoroku 题解

太幽默了。 显然可以用矩阵快速幂解决,矩阵里维护距离当前点 \(B\) 以内的所有点可不可达,转移只需分段,在区间内和不在区间内用不同的转移矩阵即可。复杂度 \(O(B^3m\log n)\)。 然后你就 T 了。 此时你很急,你现在应该快点卡常来 AK 这场比赛而不是研究其他的做法,于是我…

多路复用与多路分解

主机维护一个Socket表,通过表中记录的ipport与socket对应关系进行封装报文,接受到报文时使用报文的ip和port查找对应socket的过程 称为多路复用与多路分解 TCP socket存有本机进程到对端进程的映射关系UDPudp是无连接的,本机ip port没有和对端ip port构成映射关系,udp的soc…

计算机网络-多路复用与多路分解

主机维护一个Socket表,通过表中记录的ipport与socket对应关系进行封装报文,接受到报文时使用报文的ip和port查找对应socket的过程 称为多路复用与多路分解 TCP socket存有本机进程到对端进程的映射关系UDPudp是无连接的,本机ip port没有和对端ip port构成映射关系,udp的soc…