草稿:Leetcode 310. Minimum Height Trees

来源:互联网 发布:国内财经媒体排名 知乎 编辑:程序博客网 时间:2024/05/16 09:03

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




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}}


0 0