博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法-树-二叉树的右视图
阅读量:3966 次
发布时间:2019-05-24

本文共 2215 字,大约阅读时间需要 7 分钟。

在这里插入图片描述

方法一 BFS

使用二叉树层序遍历的思想 并用size来记录每一层的节点个数,当size==1时就是每一层的最后一个

/** * 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
rightSideView(TreeNode root) {
List
list = new ArrayList
(); if(root == null) {
return list; } Queue
queue = new LinkedList<>(); queue.offer(root); while(!queue.isEmpty()) {
int size = queue.size(); //保存某一层的节点个数 while(size > 0) {
if(size == 1) {
//说明到某一层的最右边了 list.add(queue.peek().val); } TreeNode cur = queue.poll(); size--; if(cur.left != null) {
queue.offer(cur.left); } if(cur.right != null) {
queue.offer(cur.right); } } } return list; }}

方法二 DFS

在这里插入图片描述

设置depth是为了只把最右边的节点加入集合 否则就是全树遍历加入集合

/** * 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 {
List
list = new ArrayList<>(); public List
rightSideView(TreeNode root) {
if(root == null) {
return list; } dfs(root, 0); return list; } public void dfs(TreeNode root, int depth) {
if(root == null) {
return; } if(list.size() == depth) {
list.add(root.val); } //每进入一次递归 深度加一 depth++; dfs(root.right, depth); dfs(root.left, depth); }}

转载地址:http://cmhzi.baihongyu.com/

你可能感兴趣的文章
Shell: sh,bash,csh,tcsh等shell的区别
查看>>
golang ubuntu 配置 笔记
查看>>
vim 常用命令
查看>>
golang 开源项目
查看>>
ubntu 开发服务进程
查看>>
linux 常用命令以及技巧
查看>>
记录1年免费亚马逊AWS云服务器申请方法过程及使用技巧
查看>>
golang文章
查看>>
Source Insight 经典教程
查看>>
快速打开菜单附件中的工具
查看>>
Windows系统进程间通信
查看>>
linux exec的用法
查看>>
C语言中如何使用宏
查看>>
Http与RPC通信协议的比较
查看>>
Source Insight的对齐问题
查看>>
ubuntu设置开机默认进入字符界面方法
查看>>
chrome 快捷键
查看>>
Linux下buffer和cache的区别
查看>>
程序员不应该再犯的五大编程错误
查看>>
[转载][转帖]Hibernate与Sleep的区别
查看>>