思路
二叉树的右视图,相当于对二叉树进行层序遍历,将每一层的最后一个节点存入最终的结果即可。
代码
public List<Integer> rightSideView(TreeNode root) {
List<Integer> res = new ArrayList<>();
if(root==null) return res;
//保存节点的队列
Queue<TreeNode> queue = new LinkedList<>();
//根节点先入队
queue.offer(root);
//如果队列中还有元素
while(!queue.isEmpty()){
int count = queue.size(); //记录此时队列中的元素个数
while(count-->0){ //将此时队列中的元素的左右孩子加入队列
TreeNode node = queue.poll();
if(node.left!=null) queue.offer(node.left);
if(node.right!=null) queue.offer(node.right);
if(count==0) res.add(node.val); //如果此时是队列中的最后一个元素则加入到res中
}
}
return res;
}