给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
解答:针对 此题,我一开始便想到了如果树从右节点、根节点、左节点的次序来遍历该树,那么得到的便是一个降序的树的节点的值的排列,那么只需要将最大节点的值依次往后加便可以得到累加值。
本题使用中序遍历的逆遍历来遍历所有子节点的值,(现在给出一个需要定义一个全局变量sum的做法)
private: int sum
TreeNode* ConverstBST(TreeNode* root){
if(root!=NULL){
ConverstBST(root->right);
sum+=root->val
root->val=sum;
ConvestBST(root->left);
}
return root;
}
当不使用全局变量时:
/**
* 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;
dfs(root,sum);
return root;
}
void dfs(TreeNode* root,int &sum){
if(root!=NULL){
dfs(root->right,sum);
sum=sum+root->val;
root->val=sum;
dfs(root->left,sum);
}
}
};
注意不使用全局变量时,而是使用参数传递时,sum应加取地址符号
原文:https://www.cnblogs.com/pesuedream/p/13379577.html