码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-09-24 11:53:50      阅读:80      评论:0      收藏:0      [点我收藏+]

标签: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     }

 

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

标签:neu   import   val   sans   nbsp   none   class   etc   ace   

原文地址:https://www.cnblogs.com/towerbird/p/11577443.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!