最近在刷leetcode了。。都是medium和easy。。
今天第一次碰到树遍历的题目。。超时了
310. Minimum Height Trees
public List<Integer> findMinHeightTrees(int n, int[][] edges) { nn=n; List<Integer> list=new LinkedList<>(); if(n==0){ list.add(0); return list; } for(int i=0;i<n;i++){ map.put(i,0); now=i; Set<Integer> set=new HashSet<>(); set.add(i); for(int j=0;j<edges.length;j++){ if(edges[j][0]==i||edges[j][1]==i){ int deep=1; if(edges[j][0]==i){ set.add(edges[j][1]); help(edges,deep,set,i,edges[j][1]); }else{ set.add(edges[j][0]); help(edges,deep,set,i,edges[j][0]); } } } } int min=Integer.MAX_VALUE; for(int i=0;i<n;i++){ min=Math.min(min,map.get(i)); System.out.print(map.get(i)); } for(int i=0;i<n;i++){ if(map.get(i)==min){ list.add(i); } } return list; } HashMap<Integer,Integer> map=new HashMap<>(); int now=0; int nn=0; private void help(int[][] edges,int deep,Set<Integer> set,int node,int nownode){ if(deep>map.get(node)){ map.put(node,deep); } if(set.size()==nn){ return; } if(deep>map.get(node)){ map.put(node,deep); } deep++; for(int j=0;j<edges.length;j++){ if(edges[j][0]==nownode||edges[j][1]==nownode){ if(edges[j][0]==nownode&&!set.contains(edges[j][1])){ set.add(edges[j][1]); help(edges,deep,set,node,edges[j][1]); }else if(edges[j][1]==nownode&&!set.contains(edges[j][0])){ set.add(edges[j][0]); help(edges,deep,set,node,edges[j][0]); } } } }