1. 题目
给定一个二叉树的 根节点 root
,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例 1:
1 2
| 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]
|
示例 2:
1 2
| 输入: [1,null,3] 输出: [1,3]
|
示例 3:
提示:
- 二叉树的节点个数的范围是
[0,100]
-100 <= Node.val <= 100
2. 思路
- 已知题目要求二叉树的右视图,实际上即为每层的最右节点,可考虑层序遍历
- 层序遍历的过程中,如果遇到该节点为该层的最后一个节点,即可进行记录
- 层序遍历一般借助队列的先进先出特性完成
3. 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
class Solution { public List<Integer> rightSideView(TreeNode root) { if (root == null) { return List.of(); } var result = new ArrayList<Integer>(); var queue = new ArrayDeque<TreeNode>();
queue.offer(root);
while (!queue.isEmpty()) { var size = queue.size(); for (var i = 0; i < size; ++i) { var node = queue.poll(); if (i + 1 == size) { result.add(node.val); }
if (node.left != null) { queue.offer(node.left); }
if (node.right != null) { queue.offer(node.right); } } }
return result; } }
|
4. 复杂度
Author:
zchengb
License:
Copyright (c) 2019-2024 zchengb