当前位置: 首页 > news >正文

2025年- H51-Lc159 --199. 二叉树的右视图(层序遍历,队列)--Java版

1.题目描述

在这里插入图片描述
在这里插入图片描述

2.思路

方法一:
返回一个从右侧看二叉树时能看到的所有节点的值。右视图中的每一层只能看到最右边的节点。可以使用 层序遍历(BFS),每次遍历一层时,记录该层的最后一个节点的值。
方法二补充:
在这里插入图片描述

3.代码实现

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val = val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}}
public class H199 {public List<Integer> rightSideView(TreeNode root) {//1,创建一个结果List,每次遍历一层时,记录该层的最后一个节点的值。List<Integer> result=new ArrayList<>();if(root==null) return result;Queue<TreeNode> dq=new LinkedList<>();//2. 把根节点加入队列dq.offer(root);//3.当队列不为空while(!dq.isEmpty()) {//4.记录当前队列的长度(也就是每一层的个数)int size=dq.size();for(int i=0;i<size;i++){TreeNode nowNode=dq.poll();//5.删除并返回头部元素//6. 如果是该层的最后一个节点,加到结果里if(i==size-1){result.add(nowNode.val);//把当前节点的值加入}if(nowNode.left!=null){dq.offer(nowNode.left);//7.把当前节点的左孩子加入}if(nowNode.right!=null){dq.offer(nowNode.right);//8.把当前节点的右孩子加入}}}return result;}public static void main(String[] args){H199 test=new H199();TreeNode node5=new TreeNode(5);TreeNode node4=new TreeNode(4);TreeNode node3=new TreeNode(3);TreeNode node2=new TreeNode(2,node4,node5);TreeNode root=new TreeNode(1,node2,node3);List<Integer> res=test.rightSideView(root);System.out.print(res);}
}

方法二:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<Integer> rightSideView(TreeNode root) {ArrayList<Integer> ans = new ArrayList<>();if(root == null){return ans;}Queue<TreeNode> que = new LinkedList<>();que.add(root);while (!que.isEmpty()){int len = que.size();TreeNode node = new TreeNode(101);for (int i = 0; i < len; i++) {node = que.poll();if(node.left != null){que.add(node.left);}if(node.right != null){que.add(node.right);}}ans.add(node.val);}return ans;}
}
http://www.xdnf.cn/news/652591.html

相关文章:

  • AI学习笔记二十八:使用ESP32 CAM和YOLOV5实现目标检测
  • 使用docker容器部署Elasticsearch和Kibana
  • Rk3568 Andorid 11 ,根据prop属性的值控制是否禁止u盘连接
  • 倚光科技在二元衍射面加工技术上的革新:引领光学元件制造新方向​
  • 拓扑光子混沌算法
  • 开源第三方库发展现状
  • 《软件工程》第 9 章 - 软件详细设计
  • Ini配置文件读写,增加备注功能
  • VR 技术在农业领域或许是一抹新曙光​
  • Java Class 文件编码机制全解析
  • 分布式锁与锁续期
  • 轻量级视觉语言模型 Dolphin:高效精准的文档结构化解析利器
  • 电机控制学习笔记
  • 深入解析Spring Boot与Spring Security整合实现JWT认证
  • ADS学习笔记(四) S参数仿真
  • 网络编程1
  • SAP ERP 系统拆分的七大挑战
  • WIN--文件读写
  • Linux的top命令使用
  • 在前端项目中实现打包后可配置地址(如 API 域名、静态资源路径等)
  • 告别复杂操作!链抽象如何让 Web3 用户体验媲美 Web2?
  • Element UI 对话框固定宽度 + 遮罩层深度定制方案
  • 零基础设计模式——结构型模式 - 适配器模式
  • 基于 docker 部署 k8s 集群
  • 机器学习中的线性回归:从理论到实践的深度解析
  • 运行comfyui Wan2.1 文生视频工作流,问题总结
  • vue3+vite项目中使用Tailwind CSS
  • 鸿蒙OSUniApp 制作个性化的评分星级组件#三方框架 #Uniapp
  • 力扣刷题Day 56:岛屿数量(200)
  • 多线程(5)——单例模式,阻塞队列