给定一个二叉树的 根节点
root
,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例 1:
输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2:
输入: [1,null,3] 输出: [1,3]示例 3:
输入: [] 输出: []提示:
- 二叉树的节点个数的范围是
[0,100]
-100 <= Node.val <= 100
java解题思路及代码实现
package com.java.leetcode.tree;
import com.java.leetcode.compent.TreeNode;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;
/**
* 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
*
*
*
* 示例 1:
*
*
*
* 输入: [1,2,3,null,5,null,4]
* 输出: [1,3,4]
* 示例 2:
*
* 输入: [1,null,3]
* 输出: [1,3]
* 示例 3:
*
* 输入: []
* 输出: []
*
*
* 提示:
*
* 二叉树的节点个数的范围是 [0,100]
* -100 <= Node.val <= 100
*/
public class rightSideView199 {
/**
* 该题目同样是 102 题目的一个变种
* 层序遍历数据 只取 每一层列表的最后一个元素即可
* @param root
* @return
*/
public List<Integer> rightSideView(TreeNode root) {
List<Integer> list=new ArrayList();
if(root==null){
return list;
}
Deque<TreeNode> dq=new ArrayDeque<>();
//初始化队列
dq.offer(root);
while(!dq.isEmpty()){
List<Integer>tmp=new ArrayList<>();
int size=dq.size();
while(size>0){
TreeNode node=dq.poll();
tmp.add(node.val);
if(node.left!=null){
dq.offer(node.left);
}
if(node.right!=null){
dq.offer(node.right);
}
size--;
}
if(!tmp.isEmpty()){
list.add(tmp.get(tmp.size()-1));
}
}
return list;
}
}