10力扣题做题笔记及复盘--199.二叉树的右视图(队列,二叉树)
199. 二叉树的右视图 - 力扣(LeetCode)
1、题外话
二叉树的右视图,一开始以为只要右子树就可以了,其实是不对的,举个例子【1,2】,那么是头节点的左子节点,从右边看过去,是【1,2】,如果只保留了右子节点,那么就只有【1】,这样是不对的。
2、思路
层序遍历的时候,判断是否遍历到单层的最后面的元素,如果是,就放进result数组中,随后返回result就可以了。
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 { public List<Integer> rightSideView(TreeNode root) { //说白了就是要每一层的最后一个节点; List<Integer> list = new ArrayList<>(); Queue<TreeNode> queue = new LinkedList<>(); if(root == null){ return list; } queue.offer(root); while(!queue.isEmpty()){ int size = queue.size(); for(int i=0;i<size;i++){ TreeNode node = queue.poll(); if(node.left !=null){ queue.offer(node.left); } if(node.right !=null){ queue.offer(node.right); } //每个队列的最后一个节点 if(i==size-1){ list.add(node.val); } } } return list; } }