LeetCode 515. Find Largest Value in Each Tree Row

1.题目

题意简而言之就是求一颗二叉树的每一层最大节点,并用集合的形式将其返回。

2.思路

我的想法比较愚笨,是将此二叉树中的每一个节点标记上其所在的层数,然后在按层次标记遍历所有节点得出每一层的最大节点。其中做层次标记的时候与找最大节点时候都是用的层次遍历。

3.代码


 	class TreeNode {
			int val;
			TreeNode left;
			TreeNode right;

			TreeNode(int x) {
				val = x;
			}
		}

	class TreeNeuron{
		TreeNode t;
		int level;
		
		public TreeNeuron(TreeNode t,int level){
			this.t = t;
			this.level = level;
		}
	}
    public List<Integer> largestValues(TreeNode root) {
    	List<Integer> listMax = new ArrayList<Integer>();
    	Queue<TreeNeuron> qIn = new LinkedList<TreeNeuron>();//为了确定每个节点所在层数的辅助队列
    	Queue<TreeNeuron> qOut = new LinkedList<TreeNeuron>();//最后比较输出的队列
    	
    	if(root == null)
    		return listMax;
    	
    	TreeNeuron tn = new TreeNeuron(root,1);
    	qIn.add(tn);	//根节点入队
    	int k ;	//表示临时的层数
    	while(!qIn.isEmpty()){
    		TreeNeuron temp = qIn.poll();//出队
    		qOut.add(temp);
    		k = temp.level;
    		if(temp.t.left != null)
    			qIn.add(new TreeNeuron(temp.t.left,k+1));
    		
    		if(temp.t.right != null)
    			qIn.add(new TreeNeuron(temp.t.right,k+1));
    	}
    	
    	k = 1;//k从第一层开始
	   	TreeNeuron temp = qOut.poll();//出队
    	while(temp != null){
        	int max = Integer.MIN_VALUE;
    		while(temp!=null && temp.level==k){
    			if(max < temp.t.val)
    				max = temp.t.val;
    			temp = qOut.poll();
    		}
    		k++;
    		listMax.add(max);
    	}
    	
        return listMax;
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值