题目
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
例如:
思路
1、递归。每棵树都是从右底向上->树根做递归,求累加和,将和替换节点的值。
实现方法
一、递归
/**
* 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* convertBST(TreeNode* root) {
int sum=0;
addBST(root,sum);
return root;
}
void addBST(TreeNode* root,int& sum){
if(root){
addBST(root->right,sum);
sum += root->val;
root->val=sum;
addBST(root->left,sum);
}
}
};