标签:判断 null 报错 point put nbsp return btree public
研究题意发现,每个结点对应一个Subtree Sum,于是问题就变成了,先traverse一遍,找到每个subtree的sum,之后递归求出subtree的parent结点对应的subtree的sum,可能修改为栈会更快一点?没仔细思考,以后有时间再回来看吧。
public int[] findFrequentTreeSum(TreeNode root) { Set<Integer> ans = new HashSet<>(); HashMap<Integer,Integer> sums = new HashMap<>(); getNodeSum(root,sums); Set<Map.Entry<Integer,Integer>> set = sums.entrySet(); int maxnum = 0; for(Map.Entry<Integer,Integer> e:set) { if(e.getValue()>maxnum) { maxnum=e.getValue(); ans.clear(); ans.add(e.getKey()); } else if(e.getValue()==maxnum) { ans.add(e.getKey()); } } int[] result = new int[ans.size()]; int i=0; for(int a:ans) { result[i++]=a; } return result; } public static int getNodeSum(TreeNode T,HashMap<Integer,Integer> sums){ //需要先对T进行判断,这点很重要,不然会报错NullPointerException if(T==null) return 0; int leftChildSum = T.left!=null?getNodeSum(T.left,sums):0; int rightChildSum = T.right!=null?getNodeSum(T.right,sums):0; int tempsum = T.val+leftChildSum+rightChildSum; if(sums.containsKey(tempsum)) sums.put(tempsum, sums.get(tempsum)+1); else sums.put(tempsum, 1); return tempsum; }
Leetcode508 Most Frequent Subtree Sum
标签:判断 null 报错 point put nbsp return btree public
原文地址:https://www.cnblogs.com/chason95/p/9303648.html