题目原文:
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].
题目大意:
给出一个二叉树,假设你的视线从右边看过去,返回从上到下你看到的节点(不在最右侧的都被挡上了)。
题目分析:
按层次遍历,求每层最后一个节点即可(即队列中改变层号的节点),在Easy-题目27基础上修改代码即可。
源码:(language:java)
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */
public class Solution {
public List<Integer> rightSideView(TreeNode root) {
Queue<TreeNode> queue=new LinkedList<TreeNode>();
Queue<Integer> levelqueue=new LinkedList<Integer>();
List<Integer> list=new ArrayList<Integer>();
if(root == null)
return list;
queue.add(root);
levelqueue.add(1);
//list.add(root.val);
while(!queue.isEmpty()) {
TreeNode current = queue.remove();
int curLevel=levelqueue.remove();
if(current.left!=null) {
queue.add(current.left);
levelqueue.add(curLevel+1);
}
if(current.right!=null) {
queue.add(current.right);
levelqueue.add(curLevel+1);
}
if(levelqueue.isEmpty() == true || levelqueue.peek() == curLevel + 1)
list.add(current.val);
}
return list;
}
}
成绩:
3ms,beats 10.90%,众数3ms,40.54%