#include<stdio.h>
#include<stdlib.h>
typedef int status;
typedef struct BiTNode
{
int data,new_data;
struct BiTNode* lchild, *rchild;
}BiTNode, *BiTree;
BiTree creat()
{
BiTree root = (BiTree)malloc(sizeof(BiTNode));
int x;
scanf("%d", &x);
if(x==-1)
root = NULL;
else
{
root->data = x;
root->lchild = creat();
root->rchild = creat();
}
return root;
}
//二叉搜索树
//更新每个结点的new_data域,其数值为树中所有结点值大于该结点值的结点值之和
int sum_greater(BiTree bt, int x)
{//sum初值为0;
if(bt==NULL) return 0;
if(bt->data>x) return bt->data+sum_greater(bt->lchild,x)+sum_greater(bt->rchild,x);
if(bt->data<=x) return sum_greater(bt->rchild,x);
}
void update(BiTree T,BiTree p)
{
if(p!=NULL)
{
p->new_data=p->data+sum_greater(T,p->data);
update(T,p->lchild);
update(T,p->rchild);
}
}
void print(BiTree bt)
{
if(bt==NULL)
printf("-1 ");
if(bt!=NULL)
{
printf("%d ", bt->new_data);
print(bt->lchild);
print(bt->rchild);
}
}
int main()
{
BiTree bt=creat();
BiTree p=bt;
// printf("测试:%d",sum_greater(bt, 6));
update(bt,p);
print(bt);
return 0;
}
1264更大和数
猜你喜欢
转载自blog.csdn.net/qq_43661234/article/details/103326835
今日推荐
周排行