草稿:Leetcode 310. Minimum Height Trees

这个思路是先构建一个树,然后不断地移动根节点的子节点到根节点的位置,但这个过程中需要实现的部分感觉很多,写了一半写不下去了,下面是未完成的草稿




import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.Stack;

public class Solution {
    public List<Integer> findMinHeightTrees(int n, int[][] edges) {
    	List<Integer> res = new ArrayList<Integer>();
    	if(n==0||edges.length==0) return res;
    	
    	int pos = edges[0][0];
    	int[] height = new int[n];
    	List<Integer> pre = new ArrayList<Integer>();
    	Queue<List<Integer>> later = new LinkedList<List<Integer>>();
    	while(pre.size()==n){
    		for(int i=0;i<edges.length;i++){
        		int left = edges[i][0];
        		int right = edges[i][1];
        		if(!pre.contains(left)&&!pre.contains(right)){
        			List<Integer> pair = new ArrayList<Integer>();
        			pair.add(left);
        			pair.add(right);
        			later.offer(pair);
        		}else{
        			if(pre.contains(left)){
        				height[left]++;
        			}else{
        				height[right]++;
        			}
        		}
        	}
    		while(later.size()!=0&&pre.size()<n){
    			List<Integer> pair = later.poll();
    			if(!pre.contains(pair.get(0))&&!pre.contains(pair.get(1))){
        			later.offer(pair);
        		}else{
        			if(pre.contains(pair.get(0))){
        				height[pair.get(0)]++;
        			}else{
        				height[pair.get(1)]++;
        			}
        		}
    		}
    	}
    	
    	List<Integer> left = new ArrayList<Integer>();
    	for(int i=0;i<n;i++){
    		if(height[i]==0) left.add(i);
    	}
    	
    	int[] max = new int[n];
    	for(int i=0;i<n;i++){
    		max[i] = Integer.MAX_VALUE;
    	}
    	
    	
    	//backtrack to count every height!!!!!
    	for(int i=0;i<n;i++){
    		if(!left.contains(i)){
    			for(int j=0;j<edges.length;j++){
    				
    			}
    		}
    	}
    	
    	
    	
    	
    	findroots(res,n,edges);
    	return res;
    }

	private void findroots(List<Integer> res, int n, int[][] edges) {
		// TODO Auto-generated method stub
		
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值