树结构和操作

2018-09-13  本文已影响0人  lvanzn

#includeusing namespace std;

struct tree{double average;int sum,t,pre;}a[1500];

int find(int n,int r)

{

    double mmax=-1;

    int k=0;

    for(int i=1;i<=n;++i)

    {

        if(i==r)

            continue;

        if(a[i].average>mmax)

        {

            mmax=a[i].average;

            k=i;

        }

    }

    return k;

}

int main()

{

    int n,r;

    while(cin>>n>>r)

    {

        if(n==0&&r==0)  break;

        memset(a,0,sizeof(a));

        int ans=0;

        for(int i=1;i<=n;++i)

        {

            scanf("%d",&a[i].sum);

            a[i].average=1.0*a[i].sum;

            ans+=a[i].sum;

            a[i].t=1;

        }

        for(int i=1;i

结构体储存,储存节点的父亲节点,储存节点的权值,储存节点的平均权值

操作:

1.遍历结点,寻找某一个结点的所有子结点,。。。顺序枚举1~n的结点,O(n)


int x;///寻诈的结点的父亲结点是x

for(int i=1;i<=n;++i)

{

    if(p[i].pre==x)

    {

        ...

        ///operations

        ...

    }

}

2.寻找结点的父亲结点,O(1),按下标操作


int x;///一个子结点

int ans=p[x].pre;///ans就是x的父亲结点

树的三种储存结构方式:

1.父亲节点储存

2.孩子链

3.第一孩子+兄弟链

神犇链接+题目链接:

https://blog.csdn.net/gatieme/article/details/49202739

http://acm.hdu.edu.cn/showproblem.php?pid=1055

上一篇 下一篇

猜你喜欢

热点阅读