- Convert BST to Greater Tree
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
Given a binary search Tree `{5,2,13}`:
5
/ \
2 13
Return the root of new tree
18
/ \
20 13
{10,1,#,2}
思路:
解法1:参考网上的。思路很秒。类似in-order遍历,不过是反过来的,先右后左再中间。遍历一遍就可以了。
注意:
- in-order遍历BST的结果是 sorting(从小到大)。反过来遍历的结果就是从小到大。
- 这题有个input case
{10,1,#,2}有错,这个不是BST。
代码如下:
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: the root of binary tree
* @return: the new root
*/
TreeNode * convertBST(TreeNode * root) {
int sum = 0;
helper(root, sum);
return root;
}
void helper(TreeNode * root, int & sum) {
if (!root) return;
helper(root->right, sum);
root->val += sum;
sum = root->val;
helper(root->left, sum);
}
};
本文介绍了一种将二叉搜索树(BST)转换为GreaterTree的方法,通过修改每个节点的值为原值加上所有大于该值节点的值之和。采用逆中序遍历策略,先右子树后左子树,实现一次遍历即可完成转换。
370

被折叠的 条评论
为什么被折叠?



