标签:neu import val sans nbsp none class etc ace
执行用时 :973 ms, 在所有 Java 提交中击败了5.44%的用户
内存消耗 :39.4 MB, 在所有 Java 提交中击败了92.13%的用户
有个题解莫名其妙,连个if判断都没有,改下样例就错了,代码的意思就是把节点的值改成其和右子树的和……这不对嘛。- -我已贡献一个样例,真不知道他是怎么过的。
思路是:dfs遍历树的所有节点,遇到一个节点add()算出其应该累加的值(从根开始),把结果存进hashmap里。然后进行第二遍dfs修改节点。
节点值的修改不能在dfs里,因为一旦有一个dfs()完成并返回,那个节点的值就错了。但我用队列试了试bfs,奇慢。
1 public TreeNode convertBST(TreeNode root) { 2 if (root == null) return root; 3 HashMap<TreeNode, Integer> map = new HashMap<>(); 4 dfs(root, root, map); 5 dfs2(root, map); 6 return root; 7 } 8 9 public void dfs2(TreeNode r, HashMap<TreeNode, Integer> map) { 10 if (r==null)return; 11 r.val+=map.get(r); 12 dfs2(r.left,map); 13 dfs2(r.right,map); 14 } 15 16 public void dfs(TreeNode n, TreeNode r, HashMap<TreeNode, Integer> map) { 17 if (n == null) return; 18 map.put(n, add(r, n.val)); 19 dfs(n.left, r, map); 20 dfs(n.right, r, map); 21 } 22 23 24 public int add(TreeNode cur, int val) { 25 if (cur == null) return 0; 26 int sum = 0; 27 if (cur.val > val) sum += cur.val; 28 sum += add(cur.left, val); 29 sum += add(cur.right, val); 30 return sum; 31 }
标签:neu import val sans nbsp none class etc ace
原文地址:https://www.cnblogs.com/towerbird/p/11577443.html