面试经典150题(72-77)

leetcode 150道题 计划花两个月时候刷完,今天(第三十五天)完成了6道(72-77)150:

72.(236. 二叉树的最近公共祖先) 题目描述:

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

第一版(去查了百度百科,然后就有了我的一坨代码。。。)

class Solution {Map<TreeNode,List<TreeNode>> map=new HashMap();TreeNode grandTreeNode=null;public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(p==q){return p;}dfs(root,p,q);return grandTreeNode;}public void dfs(TreeNode root, TreeNode p, TreeNode q) {if(root==null){return ;}dfs(root.left,p,q);dfs(root.right,p,q);if(grandTreeNode!=null){return;}List<TreeNode> temp=new ArrayList();if(root.left!=null&&map.get(root.left)!=null){temp.addAll(map.get(root.left));temp.add(root.left);}if(root.right!=null&&map.get(root.right)!=null){temp.addAll(map.get(root.right));temp.add(root.right);}if(p==root&&temp.contains(q)){grandTreeNode=p;return;}if(q==root&&temp.contains(p)){grandTreeNode=q;return;}if(temp.contains(p)&&temp.contains(q)){grandTreeNode=root;return;}map.put(root,temp);}
}

第二版(看了解题也没看懂,然后看评论区有个好理解的版本就试了一下,真不错,谁先找到谁就是头,都没找到那就是上一个递归)

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root==null||root==p||root==q){return root;}TreeNode left= lowestCommonAncestor(root.left,p,q);TreeNode right= lowestCommonAncestor(root.right,p,q);if(left!=null&&right!=null){return root;}else if(left!=null){return left;}else if(right!=null){return right;}return null;}
}

73-76 全是 二叉树的层次遍历,我放下面,先放 77

77.(530. 二叉搜索树的最小绝对差)题目描述:

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。

第一版(看重点,是二叉搜索树,他的中序遍历是有序的,我不信这题是简单题。。。)

class Solution {public int getMinimumDifference(TreeNode root) {//中序遍历if(root==null){return 0;}TreeNode preNode=null;int min=Integer.MAX_VALUE;Stack<TreeNode> stack=new Stack();while(!stack.isEmpty()||root!=null){while(root!=null){stack.push(root);root=root.left;}root=stack.pop();if(preNode!=null){min=Math.min(min,Math.abs(preNode.val-root.val));}preNode=root;root=root.right;}return min;}
}

73.(199. 二叉树的右视图)题目描述:

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

第一版(就是层次遍在这里插入代码片历,每次输出这一层的最后一个)

class Solution {public List<Integer> rightSideView(TreeNode root) {List<Integer> res=new ArrayList();if(root==null){return res;}//层次遍历 输出最后一个LinkedList<TreeNode> queue=new LinkedList();queue.add(root);while(!queue.isEmpty()){res.add(queue.peekLast().val);int currNum=queue.size();while(currNum!=0){TreeNode temp= queue.poll();if(temp.left!=null){queue.add(temp.left);}if(temp.right!=null){queue.add(temp.right);}currNum--;}}return res;}
}

74.(637. 二叉树的层平均值)题目描述:

给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。

第一版(还是层次遍历)

class Solution {public List<Double> averageOfLevels(TreeNode root) {List<Double> res=new ArrayList();if(root==null){return res;}Queue<TreeNode> queue=new LinkedList();queue.offer(root);while(!queue.isEmpty()){int currNum=queue.size();// 不为double 加着加着就超范围了double sum=0;for(int i=0;i<currNum;i++){TreeNode temp=queue.poll();sum+=temp.val;if(temp.left!=null){queue.offer(temp.left);}if(temp.right!=null){queue.offer(temp.right);}}res.add(sum/currNum);}return res;}
}

75.(102. 二叉树的层序遍历)题目描述:

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

第一版(这个最直接。。)

class Solution {public List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> res=new ArrayList();if(root==null){return res;}Queue<TreeNode> queue=new LinkedList();queue.offer(root);while(!queue.isEmpty()){int currNum=queue.size();List<Integer> tempList=new ArrayList();for(int i=0;i<currNum;i++){TreeNode temp=queue.poll();tempList.add(temp.val);if(temp.left!=null){queue.offer(temp.left);}if(temp.right!=null){queue.offer(temp.right);}}res.add(tempList);}return res;}
}

76.(103. 二叉树的锯齿形层序遍历)题目描述:

给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

第一版(还是层次遍历,第一层从左向右,第二层从右向左。。。)

class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> res=new ArrayList();if(root==null){return res;}boolean flag=true;Queue<TreeNode> queue=new LinkedList();queue.offer(root);while(!queue.isEmpty()){int currNum=queue.size();List<Integer> tempList=new ArrayList();for(int i=0;i<currNum;i++){TreeNode temp=queue.poll();if(flag)tempList.add(temp.val);elsetempList.add(0,temp.val);if(temp.left!=null){queue.offer(temp.left);}if(temp.right!=null){queue.offer(temp.right);}}flag=!flag;res.add(tempList);}return res;}
}

算是复习了一下,二叉树的遍历写法,递归和非递归的都有。。

第三十五天了,加油早日跳槽!!!

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

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

相关文章

Java IO流(四)-字符流输出流

字符输出流 1.1 字符流输出介绍 Writer类 写入字符流的最顶层的类 , 是一个抽象类 ,不能实例化 , 需要使用其子类FileWriter类 FileWriter类 : 用来写入字符文件的便捷类 1.2 FileWriter的成员 构造方法 : public FileWriter(File file) : 往指定的File路径中写入数据publi…

7个PyCharm实用插件实现轻松编程

大家好&#xff0c;IDE&#xff08;集成开发环境&#xff09;是开发者的武器&#xff0c;使用一个好的IDE和一些很棒的插件&#xff0c;工作效率会更高。Python是一种广泛使用的编程语言&#xff0c;PyCharm是最受欢迎的Python IDE之一。以下介绍7个PyCharm插件&#xff0c;它们…

IDE安装,关于运行vbs出现800a0046权限不足的解决情况(java进阶1)

安装教程&#xff1a;JetBrains全家桶破解&#xff1a;2023.x 破解教程-搜云库技术团队 安装过程遇到的问题 1&#xff09;关于运行vbs出现800a0046权限不足的解决情况 解决方法&#xff1a; 一句话重点&#xff1a;把360安全卫士退出后&#xff0c;成功运行了。 参考&…

iOS 不用VOIP也可以实现微信来电邀请推送持续响铃震动及及时来电取消

iOS 不用VOIP也可以实现微信来电邀请推送持续响铃震动及及时来电取消 前言一 、关于NotificationServiceExtension1. 创建2. 推送机制3. API 实例方法二、 APNS Push Payload2. 来电邀请2. 来电取消三、数据共享3. 配置共享域四 知识点就到这里,下面是主要代码4. 1 Notificati…

GB/T 16400-2023 绝热用硅酸铝棉及其制品检测

硅酸铝棉板是指用加有粘接剂的硅酸铝棉制成的板状制品&#xff0c;可用于工业热力设备、窑炉和管道起到高温绝热作用。其形状也可为毡、毯、纸、管壳等。 GB/T 16400-2023绝热用硅酸铝棉及其制品检测指标&#xff1a; 测试项目 测试标准 导热系数 GB/T 10294 外观 GB/T 1…

FineBI实战项目一(4):指标分析之每日订单总额/总笔数

1 明确数据分析目标 统计每天的订单总金额及订单总笔数 2 创建用于保存数据分析结果的表 use finebi_shop_bi;create table app_order_total(id int primary key auto_increment,dt date,total_money double,total_cnt int ); 3 编写SQL语句进行数据分析 selectsubstring(c…

python 怎么检查镜像源,并修改镜像源 https://pypi.tuna.tsinghua.edu.cn/simple

在 Python 中&#xff0c;更改镜像源以使用例如清华大学的 PyPI 镜像&#xff0c;通常涉及修改 pip 的配置。这可以通过两种主要方式来实现&#xff1a; 方法 1: 修改 pip 配置文件 定位 pip 配置文件: pip 配置文件通常位于以下位置之一&#xff1a; 在 Unix 和 macOS 上&…

记一次 easyswoole 热重载失效复盘 grpc扩展惹的祸

首先看一下运行环境 swoole version 4.8.11 php version 7.4.33 easyswoole version 3.4.6 在easyswoole 的入口文件 如下&#xff1a; <?php namespace EasySwoole\EasySwoole; use App\WebSocket\WebSocketEvents; use Ap…

WSL使用Ubuntu 20.04版本运行py-bottom-up-attention的记录,及其可能错误的解决方法

文章目录 1. 切换linux的镜像2. 安装gcc3. 查看显卡驱动4. 安装gcc版本5. wsl安装cuda 10.16. 新建虚拟环境8. 安装依赖包9. 运行代码错误运行的所有历史命令如下 WSL使用Ubuntu 20.04版本运行py-bottom-up-attention的记录&#xff0c;及其可能错误的解决方法 github代码地址…

【嵌入式】Makefile 学习笔记记录 | 嵌入式Linux

文章目录 前言一、Makefile的引入——最简单的gcc编译过程二、Makefile的规则三、Makefile的语法3.1、通配符3.2、假想目标 .phony3.3、即时变量 延时变量 四、Makefile的函数4.1、foreach4.2、filter4.3、wildcard4.4、patsubst 五、Makefile升级5.1、包含头文件在内的依赖关系…

华为认证 | 这门HCIE认证正式发布!

华为认证openEuler专家HCIE-openEuler V1.0&#xff08;中文版&#xff09;自2023年12月29日起&#xff0c;正式在中国区发布。 01 发布概述 基于“平台生态”战略&#xff0c;围绕“云-管-端”协同的新ICT技术架构&#xff0c;华为公司打造了覆盖ICT领域的认证体系&#xff0…

“我在大A炒自己”

嘻嘻嘻&#xff0c;大伙儿好像还挺喜欢我闲聊&#xff0c;今天太忙&#xff0c;没得空精进技术&#xff0c;那咱还是接着闲聊吧&#x1f602;&#x1f602; 看到标题点进来的各位大A真爱粉&#xff0c;请先收下我的崇高敬意&#xff01;&#xff01;别误会&#xff0c;标题说的…

Educational Codeforces Round 154 (Rated for Div. 2) (VP-8,寒假加训)

VP时间 A. 这个字符串所表示是数字为质数 17&#xff0c;71 wa2发 3.ac B. 看一个数字是什么&#xff08;是0&#xff09; 开始遍历找到最后一个0 这块区域肯定可以一样 然后比较后面的 000101 010111 这例子可以说明应该枚举0&#xff0c;1之间然后让模拟一下 如…

你想使用域名访问一个ip的网页,你应该怎么办呢?

你想使用域名访问一个ip的网页,你应该怎么办呢? eg:你想用https://test.com/访问http://1.1.1.1/方法: eg:你想用https://test.com/访问http://1.1.1.1/ 方法: 1.首先,如果你是服务器的管理者,你需要在服务器的官网申请一个test.com的域名,然后在官网将域名映射到1.1.1.1上. …

会stm32有机会进大公司吗?

今日话题&#xff0c;会stm32有机会进大公司吗&#xff1f;我本科期间参与了飞思卡尔和电赛等比赛&#xff0c;使用过多种单片机&#xff0c;但渐渐发现单片机只是其中的一小部分。不要过分迷恋所谓的单片机基础和技巧&#xff0c;更值得深入研究的是C语言。如果你对此感兴趣&a…

Linux第9步_通过终端查看U盘文件

学习完“USB设置”后&#xff0c;我们学习通过终端来查看U盘文件。前面讲解过使用鼠标打开U盘&#xff0c;但是在实际使用中&#xff0c;更多的还是采用命令来实现对U盘的操作。 1、在桌面&#xff0c;右击鼠标&#xff0c;弹出下面的界面: 2、点击上图中的“打开终端”&#…

【leetcode100-031】【链表】k个一组翻转链表

【题干】 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节…

torch.from_numpy

torch.from_numpy 是 PyTorch 中的一个函数&#xff0c;用于将 NumPy 数组转换为 PyTorch 的 Tensor。这个函数主要用于共享底层数据内存&#xff0c;而不进行数据的复制。 具体用法如下&#xff1a; import torch import numpy as np# 创建一个 NumPy 数组 numpy_array np.…

Juint 测试 简单入门

JUnit 是一个用于编写和运行 Java 程序中单元测试的框架。它是一个开源框架&#xff0c;广泛用于测试Java应用程序中的各个模块和方法。 1. **创建一个 Java 类&#xff1a;** 创建一个要测试的 Java 类&#xff0c;例如 Calculator 类&#xff0c;其中包含一些要测试的方法。…

在C++中,如果你想要对其他类的对象数据进行增删改查(CRUD:Create, Read, Update, Delete),有几种常见的方式可以实现。

文章目录 1. 使用公共成员变量&#xff08;不推荐&#xff09;2. 使用访问器和修改器&#xff08;Getter 和 Setter&#xff09;3. 使用友元函数或友元类4. 使用成员函数5. 通过构造函数和析构函数 在C中&#xff0c;如果你想要对其他类的对象数据进行增删改查&#xff08;CRUD…