LeetCode 538. 把二叉搜索树转换为累加树
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
解题思路
根据二叉搜索树的性质(小中大),此题可以看做是中序遍历的变种(右中左),最右子节点的值必定最大,按照从大到小的顺序更新节点并累加赋给下一个节点。
代码
/**
* 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 {
public:
TreeNode* bstToGst(TreeNode* root) {
if (root) {
bstToGst(root->right);
sum += root->val;
root->val = sum;
bstToGst(root->left);
}
return root;
}
private:
int sum = 0;
};