LeetCode: Binary Tree Right Side View

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].

题意:如果处在一个二叉树的右边,从根向下输出能看到的所有节点的集合。

基本思路:记录二叉树每层节点,然后将最右边的节点保存到List中,然后输出。因此考虑使用按层遍历二叉树算法。主要代码如下:

public List<Integer> rightSideView(TreeNode root) {
	List<Integer> result = new ArrayList<Integer>();
        if(root == null)	return result;
        //定义一个Queue,保存树的每层节点。
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(root);  //将根节点加入队列
        while(!queue.isEmpty()) {
        	int size = queue.size();  //判断队列的大小,即上层节点个数
        	for(int i=0; i<size; i++) {
        		TreeNode tn = queue.poll(); //依次弹出上层节点,并将其子节点加入队列
        		if(i == 0)  //因为队列是先进先出,节点加入过程也是从右向左,所以每层最右节点就是每层第一个元素
        			result.add(tn.val); //将最右节点加入List结果集中
    			if(tn.right != null) queue.offer(tn.right); //首先向队列中加入右节点
        		if(tn.left != null) queue.offer(tn.left);   //向队列中加入左节点
        	}
        }
        return result;
}

同理可以实现输出从左看到的节点集合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值