538. Convert BST to Greater Tree 538.将BST转换为更大的树
Posted immiao0319
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了538. Convert BST to Greater Tree 538.将BST转换为更大的树相关的知识,希望对你有一定的参考价值。
Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST.
Example:
Input: The root of a Binary Search Tree like this: 5 / 2 13 Output: The root of a Greater Tree like this: 18 / 20 13
思路问题:
helper中序递增,什么也不做,就返回一个数组。
然后主函数里面不就是最一般的情况了吗?大于等于它的就加上。
那这样,主函数里面就要再遍历一遍
新的思路:helper中序里面可以直接加、做一些别的处理。似乎更合理。
主函数就不用遍历两次了。
没加的值为sum = 13 sum = root.val; 13 加和后的值为root.val = 26.root.val += sum;两个13相加了。 root.val本来就有值,此时同一个值加了两次,被自己覆盖了。反正不能加新值就对了。 赋值后再加新值,等于加了两次 没加的值为sum = 5 加和后的值为root.val = 10 没加的值为sum = 2 加和后的值为root.val = 4 这么写有bug
加和后的值为root.val = root.val += sum;就是本身,root本身没有值 没加的值为sum = 13 加和后的值为root.val = 18 5加上了13 没加的值为sum = 18 加和后的值为root.val = 20 没加的值为sum = 20 写是这么写,初始化是从sum开始的。第一步并没有加。 这么写没bug 相加后再赋值,等于只了加一次
特殊情况必须先写上,实在是怕忘。其实提醒自己一下也不难对吧。
class Solution { int sum = 0; public TreeNode convertBST(TreeNode root) { //特殊情况必须先写上,实在是怕忘 if (root == null) return null; convertBST(root.right); root.val += sum; sum = root.val; convertBST(root.left); return root; } }
以上是关于538. Convert BST to Greater Tree 538.将BST转换为更大的树的主要内容,如果未能解决你的问题,请参考以下文章
538. Convert BST to Greater Tree
538. Convert BST to Greater Tree
538. Convert BST to Greater Tree
538. Convert BST to Greater Tree