题目
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
例如
输入: 原始二叉搜索树:
5
/ \
2 13
输出: 转换为累加树:
18
/ \
20 13
思路
- 每个节点加所以大于它的节点值。二叉搜索树的中序遍历是按照从小到大的顺序遍历,现在用逆中序遍历,即按照从大到小的顺序遍历,依次对每个节点加上之前节点的和。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
int sum = 0;
public:
TreeNode* convertBST(TreeNode* root) {
helper( root );
return root;
}
void helper( TreeNode* node ) {
if ( node == nullptr ) return;
helper( node->right );
node->val += sum;
sum = node->val;
helper( node->left );
return;
}
};