給你一個二叉樹的根結(jié)點 root 迈倍,請返回出現(xiàn)次數(shù)最多的子樹元素和遭庶。如果有多個元素出現(xiàn)的次數(shù)相同贯城,返回所有出現(xiàn)次數(shù)最多的子樹元素和(不限順序)。
一個結(jié)點的 「子樹元素和」 定義為以該結(jié)點為根的二叉樹上所有結(jié)點的元素之和(包括結(jié)點本身)斗忌。
示例 1:
image.png
輸入: root = [5,2,-3]
輸出: [2,-3,4]
示例 2:
image.png
輸入: root = [5,2,-5]
輸出: [2]
深度優(yōu)先搜索算法
class Solution {
int max = 0;
public int[] findFrequentTreeSum(TreeNode root) {
Map<Integer, Integer> map = new HashMap<>();
helper(root, map);
List<Integer> list = new ArrayList<>();
for (Integer i : map.keySet()) {
if (map.get(i) == max) {
list.add(i);
}
}
return list.stream().mapToInt(Integer::valueOf).toArray();
}
int helper(TreeNode root, Map<Integer, Integer> map) {
if (root == null) {
return 0;
}
int left = helper(root.left, map);
int right = helper(root.right, map);
int val = left + right + root.val;
map.put(val, map.getOrDefault(val, 0) + 1);
max = Math.max(max, map.get(val));
return val;
}
}
來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/most-frequent-subtree-sum
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán)旺聚,非商業(yè)轉(zhuǎn)載請注明出處织阳。