给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和
例如:
输入: 原始二叉搜索树:
2
/ \
0 3
/ \
-4 1
输出: 转换为累加树:
5
/ \
6 3
/ \
2 6
思想:根据二叉排序树的特点,采用右根左的遍历顺序进行转换,设置一个标志前驱结点指针,当前驱结点不等于NULL时,将当前结点的数据域与前驱结点的数据域进行累积
相关模块C语言代码:
typedef struct TreeNode
{
int data;
struct TreeNode *lchild;
struct TreeNode *rchild;
}TreeNode;
void addition(TreeNode *root, TreeNode *&pre) //累加模块代码
{
if(root!=NULL)
{
addition(root->rchild,pre); //遍历右子树
if(pre!=NULL)
root->data+=pre->data; //累加
pre=root; //标记前驱结点
addition(root->lchild,pre); //遍历左子树
}
}
void convertBST(TreeNode *root) //调用模块代码
{
TreeNode *pre=NULL;
addition(root,pre);
}