给定一个二叉搜索树(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 {
int temp = 0;
public:
TreeNode* convertBST(TreeNode* root) {
//二叉搜索树的性质:它或者是一颗空树;或者它的左子树小于根节点,右子树大于根节点;
//即左子树小于根节点;右子树大于根节点;
//那么我们可以根据右子树>根>左子树进行累加
if(!root){
return root;
}
convertBST(root->right);
root->val += temp;
temp = root->val;
convertBST(root->left);
return root;
}
};