【问题描述】199.二叉树的右视图

给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:1            <---/   \
2     3         <---\     \5     4       <---

【解答思路】

1. BFS

层次遍历时保存每层的最右一个节点
时间复杂度:O(N) 空间复杂度:O(N)

public List<Integer> rightSideView(TreeNode root) {if(root == null){return  new ArrayList<>();}List<Integer>  ret =  new ArrayList<>();Queue<TreeNode> queue = new LinkedList<>();queue.offer(root);while(!queue.isEmpty() ){每层的sizeint size = queue.size();//遍历当层for(int  i =0; i<size ;i++){TreeNode node = queue.poll();//最右边 if(size-1 == i ){ret.add(node.val);}//遍历当层节点,添加下一层节点if(node.left!=null){queue.offer(node.left);}if(node.right!=null){queue.offer(node.right);}}}return ret;}
2. 前序遍历改造,先访问右子树

时间复杂度:O(N) 空间复杂度:O(N)

 public List<Integer> rightSideView(TreeNode root) {List<Integer> res = new ArrayList<>();dfs(root, 0, res);return res;}private void dfs(TreeNode node, int level, List<Integer> res) {if (node == null)return;if (level == res.size()) res.add(node.val);  // 每一层的第一个节点dfs(node.right, level+1, res);dfs(node.left, level+1, res);}

【总结】

1.二叉树遍历
  • 前序遍历 先输出当前结点的数据,再依次遍历输出左结点和右结点
  • 中序遍历 先遍历输出左结点,再输出当前结点的数据,再遍历输出右结点
  • 后续遍历 先遍历输出左结点,再遍历输出右结点,最后输出当前结点的数据
2. Queue操作

3. 切割子问题 分层思考

[Leedcode][JAVA][第199题][二叉树的右视图][BFS][DFS][前中后序遍历]相关推荐

  1. java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...

    前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...

  2. 二叉树非递归dfs——简单思路搞定前中后序遍历

    前言:相信很多同学都被二叉树非递归dfs的前中后序遍历方法弄的头疼.网上的答案,什么前中后序遍历各有一套写法,还有什么一个栈的写法,两个栈的写法.看起来能理解,一闭眼自己写都记不住.今天介绍一种用一种 ...

  3. [Leedcode][JAVA][第94/144/145题][前中后序遍历][递归][迭代][二叉树]

    [问题描述][] 前序遍历 先输出当前结点的数据,再依次遍历输出左结点和右结点 中序遍历 先遍历输出左结点,再输出当前结点的数据,再遍历输出右结点 后续遍历 先遍历输出左结点,再遍历输出右结点,最后输 ...

  4. 二叉树前中后序遍历+刷题【中】【数据结构/初阶/C语言实现】

    文章目录 1. 二叉树基础操作 1.1 二叉树遍历 1.1.1 前序遍历 前序遍历(Pre-Order Traversal) 1.1.2 中序遍历 中序遍历(In-Order Traversal) 1 ...

  5. 二叉树的前,中,后序遍历(思路分析) [Java][数据结构]

    二叉树的前,中,后序遍历(思路分析) 前序遍历: 先输出父节点, 再遍历左子树和右子树 中序遍历: 先遍历左子树, 再输出父节点,再遍历右子树 后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点 ...

  6. Java二叉树的前中后序遍历

    Java二叉树的前中后序遍历 1.前序遍历 1.1前序遍历概念 1.2前序遍历习题 2.中序遍历 2.1中序遍历概念 2.2中序遍历习题 3.后续遍历 3.1后序遍历概念 3.2后序遍历习题 大家好, ...

  7. 代码随想录——二叉树(一):前中后序遍历,层序遍历,翻转

    题目来自:https://www.programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80. ...

  8. 二叉树N叉数的前中后序遍历总结,python实现递归法和迭代法

    关于二叉树的前序遍历(preoder).中序遍历(inorder)和后序遍历(postorder),实际上只需要记住:左子节点一定在右子节点的左边(左右),所谓前中后序遍历就是根节点的位置不同,前序是 ...

  9. 二叉树前中后序遍历的非递归实现以及层次遍历、zig-zag型遍历详解

    前言 二叉树的遍历是一个比较常见的问题,递归实现二叉树的前中后序遍历比较简单,但非递归实现二叉树的前中后序遍历相对有难度.这篇博客将详述如何使用非递归的方式实现二叉树的前中后序遍历,在进行理论描述的同 ...

最新文章

  1. 探究位置误差对单目3D目标检测影响
  2. MVC3异常处理的方法
  3. java B2B2C springmvc mybatis电子商务平台源码-Spring Cloud Security
  4. 学习C#从哪些方面去学习,才能全面掌握基础知识
  5. 自行车实现无人驾驶,背后究竟有何“天机”?
  6. 王小云计算机,王小云学者主页-科技工作者之家
  7. 还原出厂设置 擦除frp_如何备份,擦除和还原Apple Watch
  8. python模块request怎么安装_安装 request模块
  9. B8.软件工程与设计模式
  10. html中实现类似于弹幕的效果代码,javascript实现弹幕效果
  11. B站成立快乐奖学金 首期投入419万4172元
  12. Python 根据文件绝对路径删除文件
  13. Starling浅尝
  14. GIT安装与使用记录_已迁移
  15. (BookxNote Pro)Windows版Marginnote 3 阅读神器 自动生成脑图/思维导图
  16. wpe手机中文汉化版下载_wpe中文3.0专业版
  17. 论文阅读——Don‘t Stop Pretraining: Adapt Language Models to Domains and Tasks
  18. 数论之指标介绍及其应用(基于阶与原根的应用)
  19. 通过两台交换机级联来连接多台设备
  20. Java自学教程!mysql环境变量配置好了之后怎么办

热门文章

  1. java final内存机制_Java中的内存处理机制和final、static、final static总结
  2. 《redis 设计与实现》读书笔记
  3. 11-Flutter移动电商实战-首页_屏幕适配方案和制作
  4. net.sf.ezmorph.Morpher问题解决
  5. yarn 安装 sass
  6. div中图片下方有边距
  7. 西电继续教育计算机试题答案,西安电子科技大学网络与继续教育学院微机原理试题...
  8. CentOS x64 安装gcc
  9. IEnumerable.EachTSource(FuncTSource, TSource predicate) 逐个更改列表成员的值
  10. 易支付系统源码_刷脸支付系统源码,插件源码合作模式有哪些,采购源码需要注意什么...