一、思路
这题和二叉树的层序遍历几乎一样,就是在层序遍历的基础上,只把每层最右边的元素加入list里即可
二、记忆
1.双端队列中有记录长度的属性,可以直接获取
Deque<TreeNode> treeNodes = new LinkedList<>();
int currentsize = treeNodes.size();
三、代码
public List<Integer> rightSideView(TreeNode root){
if (root==null) return new ArrayList<>();
Deque<TreeNode> treeNodes = new LinkedList<>();
List<Integer> ret = new ArrayList<>();
treeNodes.add(root);
while(!treeNodes.isEmpty()){
int currentsize = treeNodes.size();
for (int i = 0;i<currentsize;i++){
TreeNode temp = treeNodes.pollFirst();
if (i==currentsize-1) ret.add(temp.val);//每行最后一个树加入
if (temp.left!=null){
treeNodes.addLast(temp.left);
}
if (temp.right!=null){
treeNodes.addLast(temp.right);
}
}
}
return ret;
}