1264更大和数

#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;
}
发布了98 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43661234/article/details/103326835