leetcode 538. 把二叉搜索树转换为累加树

Posted towerbird

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 538. 把二叉搜索树转换为累加树相关的知识,希望对你有一定的参考价值。

执行用时 :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     

 

以上是关于leetcode 538. 把二叉搜索树转换为累加树的主要内容,如果未能解决你的问题,请参考以下文章

[LeetCode]538. 把二叉搜索树转换为累加树

leetcode 538. 把二叉搜索树转换为累加树

*Leetcode 538. 把二叉搜索树转换为累加树

LeetCode 二叉树专项把二叉搜索树转换为累加树(538)

leetcode 538. 把二叉搜索树转换为累加树

Leetcode刷题Python538. 把二叉搜索树转换为累加树