力扣打卡:剑指 Offer II 046. 二叉树的右侧视图
解题思路
经典的二叉树的层序框架
- 在遍历框架时,当发现了
i==size-1
,那么将节点的val
加入ans
中
if(root==null) return 0;
Queue<TreeNode> que = new LinkedList<>();
que.offer(root);
while(!que.isEmpty()){
int size = que.size(); // 此时记录每一层的节点个数
for(int i=0; i<size; i++){
TreeNode node = que.poll();
// do something
if(node.left!=null) que.offer(node.left);
if(node.right!=null) que.offer(node.right);
}
// do something
}
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Integer> rightSideView(TreeNode root) {
// 二叉树的层序框架
List<Integer> ans = new ArrayList<>();
if(root==null) return ans;
Queue<TreeNode> que = new LinkedList<>();
que.offer(root);
while(!que.isEmpty()){
int size = que.size();
for(int i=0; i<size; i++){
TreeNode node = que.poll();
if(i==size-1) ans.add(node.val);
if(node.left!=null) que.offer(node.left);
if(node.right!=null) que.offer(node.right);
}
}
return ans;
}
}