题目
Given a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.
For example:
Given the following binary tree,
1 <---
/ \
2 3 <---
\ \
5 4 <---
You should return [1, 3, 4].
题意:取出每层节点中最右边的那个节点。刚开始我理解错了,以为是只提取最右边那条线上的节点,原来不是这样的。
思路
取出每层节点中最右边的那个节点,这个题的解法和按层从左到右打印节点的解法一样,即借用两个队列来完成即可。
实现代码如下:
public class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> res = new ArrayList<Integer> ();
Queue<TreeNode> q1 = new LinkedList<TreeNode> ();
Queue<TreeNode> q2 = new LinkedList<TreeNode> ();
if(root==null){
return res;
}
q1.add(root);
while(!q1.isEmpty()){
while(!q1.isEmpty()){
TreeNode t = q1.poll();
//将这一层的最后一个节点加入结果集中
if(q1.isEmpty()){
res.add(t.val);
}
//将下一层的节点放入队列q2中
if(t.left!=null){
q2.add(t.left);
}
if(t.right!=null){
q2.add(t.right);
}
}
//将q2中的节点移入到q1中
while(!q2.isEmpty()){
q1.add(q2.poll());
}
}
return res;
}
}