题目
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:
1 <---
/ \
2 3 <---
\ \
5 4 <---
解法
BFS 解法
思路
逐层遍历,把每一层的最后一个元素拿出来即可。
套路模板,伪代码如下:
Queue queue = new Queue(); // 准备一个队列,我喜欢用Java里的LinkedList,随心所欲,想从哪边出就从哪边出
if(root != null) {
queue.add(root); // 把根结点加进来
}
while(!queue.isEmpty()) { // 结束条件就是遍历完最后一层,为空退出
for(queue) { // 特别注意,要用成计数的方式来遍历,因为要让上一层出队,并且让上一层的子节点入队,别一边出一边进,仔细想想就知道问题在哪了。
node = queue.poll();
if(null != node.left )
queue.add(node.left);
if(null != node.right)
queue.add(node.right);
}
}
代码
class Solution {
List<Integer> res = new ArrayList<>();
public List<Integer> rightSideView(TreeNode root) {
if(root == null) return res;
LinkedList<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()) {
res.add(queue.getLast().val);
for(int i=queue.size();i>0;i--) {
TreeNode poll = queue.removeFirst();
if(null != poll.left) {
queue.add(poll.left);
}
if(null != poll.right) {
queue.add(poll.right);
}
}
}
return res;
}
}