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

烟台电子商务网站建设自动收录网

烟台电子商务网站建设,自动收录网,手机网站制作公司 广州,wordpress 查看文章1.问题 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 示例 2: 输入: [1,null,3] 输出: [1,3] 示例 3: 输入: [] 输出: []…

1.问题

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

示例 1:

在这里插入图片描述

输入: [1,2,3,null,5,null,4]
输出: [1,3,4]

示例 2:

输入: [1,null,3]
输出: [1,3]

示例 3:

输入: []
输出: []

提示:

  • 二叉树的节点个数的范围是 [0,100]
  • -100 <= Node.val <= 100

2.解题思路

经历过前面几篇关于二叉树的层序遍历算法之后(参见102.二叉树的层序遍历,107.二叉树的层序遍历II),非常容易的就可以通过这种算法解答此题,基本思想就是围绕队列性质,广度优先算法解决。当然,深度优先算法也是可以解决的。

2.1 广度优先(BFS)

利用队列,遍历每层节点,并记录每层最后一个元素,直到遍历完最后一层,即可得到结果。访问顺序如下图所示:
在这里插入图片描述
红色结点自上而下组成答案,边缘以访问顺序标号。
复杂度

  • 时间复杂度: O(N),每个节点都入队出队了 1 次。
  • 空间复杂度: O(N),使用了额外的队列空间。

2.2 深度优先(DFS)

1)优先访问右子树,即访问顺序为:根-右-左;
2)如果当前节点所在深度还没有出现在res里(因为一层就一个节点),说明在该深度下当前节点是第一个被访问的节点,因此将当前节点加入res中。

if len(res) < depth:res.append(root.val)
# 遍历右子树
if root.right:dfs(root.right, depth + 1, res)
# 遍历左子树
if root.left:dfs(root.left, depth + 1, res)

复杂度

  • 时间复杂度: O(N),每个节点都访问了 1 次。
  • 空间复杂度: O(N),因为这不是一棵平衡二叉树,二叉树的深度最少是 logN, 最坏的情况下会退化成一条链表,深度就是N,因此递归时使用的栈空间是 O(N) 的。

3.代码

/*** 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 {/**广度优先1.利用层序遍历思想,统计每层最后一个元素,即为答案2.分层标识*/public List<Integer> rightSideView2(TreeNode root) {//空节点if(null==root){return new ArrayList<>();}List<Integer> res=new ArrayList();//每层的遍历结果集List<Integer> tmp=new ArrayList();TreeNode node;//队列Queue<TreeNode> q=new LinkedList();//入队q.add(root);//分层标识q.add(null);while(!q.isEmpty()){node=q.poll();if(null!=node){tmp.add(node.val);//左右子树入队if(null!=node.left){q.add(node.left);}if(null!=node.right){q.add(node.right);}}//否层,该层遍历完毕else{if(!tmp.isEmpty()){//收集每层最后一个元素res.add(tmp.get(tmp.size()-1));tmp=new ArrayList();q.add(null);}}}return res;}//深度优先,递归public List<Integer> rightSideView(TreeNode root) {//判空if(null==root){return new ArrayList();}List<Integer> res=new ArrayList();dfs(root, 0, res);return res;}private void dfs(TreeNode root, int depth, List<Integer> res){if(res.size()==depth){res.add(root.val);}//左右子树,先遍历右子树,然后左子树if(null!=root.right){dfs(root.right, depth+1, res);}if(null!=root.left){dfs(root.left, depth+1, res);}}
}
http://www.khdw.cn/news/17553.html

相关文章:

  • 制作微信公众的网站开发建站开发
  • 网站建设 工具企业网站建设专业服务
  • qt做网站百度指数如何分析数据
  • 东营网站建设公司2021年网络热点舆论
  • 二级域名可以做网站吗今天特大军事新闻
  • 好用的企业邮箱seo短视频网页入口引流
  • 做网站被拘留北京seo如何排名
  • 深圳市网站建设公司设计公司中国搜索
  • 广州番禺服装网站建设惠州seo关键词推广
  • 经典网站模板下载百度推广客服电话24小时
  • 做网站要多少seo排名优化首页
  • 如何防止网站被镜像上海网络推广排名公司
  • 电脑可以做服务器部署网站吗经典模板网站建设
  • 竞价在什么网站上做品牌推广方案包括哪些
  • 新手搭建做网站竞价外包
  • 杭州西湖区做网站网络科技公司
  • 江苏瀚和建设网站个人建网站的详细步骤
  • 骏驰网站建设seo狂人
  • 模板堂网站源码无安全警告的浏览器
  • 百度收录网站方法推广恶意点击软件怎样使用
  • 百度广告平台搜索引擎seo外包
  • 阿里云 oss做网站2023年中国进入一级战备状态了吗
  • 竹子建站模板怎么下载营销网站类型
  • 为什么做旅游网站整站关键词排名优化
  • 做区域分析的地图网站成都业务网络推广平台
  • poco摄影网seo联盟
  • 百度企业查询北京网站营销seo方案
  • 南海建设工程交易中心网站运营商大数据精准营销获客
  • 云南网站建设优化网络营销推广专员
  • 做百度推广去些网站加客户百度代理查询系统