给定一个二叉搜索树(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 {
public:
int sum = 0;
TreeNode* convertBST(TreeNode* root) {
if (root != nullptr) {
convertBST(root->right);
sum += root->val;
root->val = sum;
convertBST(root->left);
}
return root;
}
};