一.题目
给定一个二叉搜索树(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;
}
三.提交记录


四.备注
二叉搜索树的特点是按照左、中、右的顺序由小到大排序,反向遍历即可实现由大到小累加的功能,每次累加结果保存到对应的位置即可。

本文介绍如何将二叉搜索树转换为累加树,通过递归地从右子树开始遍历并更新节点值,实现了每个节点值等于原值加上所有大于它的节点值之和。代码示例使用C语言实现。
&spm=1001.2101.3001.5002&articleId=100151105&d=1&t=3&u=6af840c2fffe4cfc8d6a28ccf0fea3be)
348

被折叠的 条评论
为什么被折叠?



