题目
https://leetcode-cn.com/problems/binary-tree-right-side-view/
代码
广度优先搜索
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<Integer> rightSideView(TreeNode root) {
ArrayList<Integer> res=new ArrayList<>();
if(root==null)
return res;
LinkedList<TreeNode> queue=new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
int size=queue.size();
for(int i=0;i<size;i++){
TreeNode node=queue.removeFirst();
//这一层的最后一个
if(i==size-1){
res.add(node.val);
}
if(node.left!=null)
queue.addLast(node.left);
if(node.right!=null)
queue.addLast(node.right);
}
}
return res;
}
}
复杂度
时间复杂度 : O(n)。 每个节点最多进队列一次,出队列一次,因此广度优先搜索的复杂度为线性。
空间复杂度 😮(n)。每个节点最多进队列一次,所以队列长度最大不不超过n,所以这里的空间代价为 O(n)。