一.题目
给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。
示例:
输入: 二叉搜索树:
5
/ \
2 13
输出: 转换为累加树:
18
/ \
20 13
二.代码(C)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
void add(struct TreeNode*root,int* sum);
struct TreeNode* convertBST(struct TreeNode* root)
{
int sum=0;
if(root)
add(root,&sum);
return root;
}
void add(struct TreeNode*root,int* sum)
{
if(!root)
return;
add(root->right,sum);
root->val += *sum;
*sum = root->val;
add(root->left,sum);
return;
}
三.提交记录
四.备注
二叉搜索树的特点是按照左、中、右的顺序由小到大排序,反向遍历即可实现由大到小累加的功能,每次累加结果保存到对应的位置即可。