中级农民
- 积分
- 101
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2015-9-4
- 最后登录
- 1970-1-1
|
直接上代码吧,这样比较清楚!没有测试,可能有小bug,但是思路就是DFS + DP- class TreeNode {
- int val;
- List<TreeNode> children;
- public TreeNode() {
- val = 0;
- children = new ArrayList<TreeNode>();
- }
- }
- class Wapper {
- TreeNode node;
- int parentVal;
- public Wapper(TreeNode node, int parentVal) {
- this.node = node;
- this.parentVal = parentVal;
- }
- @Override
- public boolean equals(Wapper an) {
- return this.node == an.node && this.parentVal == an.parentVal;
- }
- }
- public int maxVal(TreeNode root) {
- if(root == null) return 0;
- HashMap<Wapper, Integer> map = new HashMap<Wapper, Integer>();
- return maxValRec(root, -1, map);
- }
- public int maxValRec(TreeNode node, int parentVal, HashMap<Wapper, Integer> map) {
- if(node == null) return 0;
- Wapper wa = new Wapper(node, parentVal);
- if(map.containsKey(wa)) return map.get(wa);
- int bestVal = 0;
- int max = 0;
- for(int i=1; i<=10; i++) {
- if(i == parentVal) continue;
- int sum = i;
- for(TreeNode child : node.children)
- sum += maxValRec(child, i, map);
- if(sum > max) {
- max = sum;
- bestVal = i;
- }
- }
- node.val = bestVal;
- map.put(wa, max);
- return max;
- }
复制代码 |
|