【LeeCode】199.二叉树的右视图

时间:2023-01-13 23:00:25


【题目描述】

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

​https://leetcode.cn/problems/binary-tree-right-side-view/​

【示例】

【LeeCode】199.二叉树的右视图

【代码】

思路: 层序遍历的时候,判断是否遍历到单层的最后面的元素,如果是,就放进result数组中,随后返回result就可以了

class Solution {
List<Integer> list = new ArrayList<>();
public List<Integer> rightSideView(TreeNode root) {
List<Integer> list = new ArrayList<>();
Deque<TreeNode> deque = new LinkedList<>();

if (root == null) return;
deque.offerLast(root);
while (!deque.isEmpty()){
int len = deque.size();
for (int i = 0; i < len; i++){
TreeNode node = deque.pollFirst();
if (node.left != null) deque.addLast(node.left);
if (node.right != null) deque.addLast(node.right);
if (i == len - 1) list.add(node.val);
}
}
return list;
}
}

【代码】admin

基于队列实现, 双端队列感觉效果一样的。这里特殊的地方是, 需要判断当前是不是最后一个元素,是就添加值就行了

class Solution {
List<Integer> list = new ArrayList<>();
public List<Integer> rightSideView(TreeNode root) {
List<Integer> list = new ArrayList<>();
Queue<TreeNode> deque = new LinkedList<>();

if (root == null) return list;
deque.offer(root);
while (!deque.isEmpty()){
int len = deque.size();
for (int i = 0; i < len; i++){
// 等效poll() 就是输出队列
TreeNode node = deque.poll();
// addLast()就是往队列后面添加元素
if (node.left != null) deque.offer(node.left);
if (node.right != null) deque.offer(node.right);
if (i == len - 1) list.add(node.val);
}
}
return list;
}
}