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中。

题解:

其实就是层次遍历,然后每次遍历到一层的结束时候,将最后的那一个节点保存进list中。这题的思路和LeetCode Minimum Depth of Binary Tree http://blog.csdn.net/sun_wangdong/article/details/49159253  相似,用了一个小技巧,就是用两层循环,外面的那层循环是将节点保存进临时的linkedlist的长度,没将一个节点压出来的时候,它的长度就减一,然后内层循环是每一层的长度,也就是每一层的节点个数,每遍历一层之后,就得计算这一层的长度,并且每次在遍历的时候,都将这一层的长度减为0的时候,也就是最右边的那个节点保存进list中,也就是我们需要求的,这个技巧非常好,有利于我们解决类似于层次遍历的题。

public class Solution 
{
    public List<Integer> rightSideView(TreeNode root)
	{
		LinkedList<Integer> list = new LinkedList<Integer>();
		LinkedList<TreeNode> nodes = new LinkedList<TreeNode>();
		if(root == null)
			return list;
		else
		{
			nodes.add(root);
			//list.add(root.val);
			int length = nodes.size();
			while(!nodes.isEmpty())
			{
				while(length-- > 0)
				{
					//if(length == 0)
					//System.out.println(length);
					TreeNode node = nodes.peek();
					nodes.poll();
					if(length == 0)
					{
					    System.out.println(node.val);
					    list.add(node.val);
					}
					if(node.left != null)
					    nodes.add(node.left);
					if(node.right != null)
					    nodes.add(node.right);
				}
				length = nodes.size();
				System.out.println(length);
			}
			return list;
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值