struct Node
{
int l;
int r;
int num;
} aNode[4*N];
int data[N];
void build(int l,int r,int n)//l为build的第一个编号,r为build的尾,n为以第n个节点为当前的根
{
int mid=(l+r)>>1;
aNode[n].l=l;
aNode[n].r=r;
if(l==r)
aNode[n].num=data[l];//为找到当前点为一个叶子,直接赋值
else
{
build(l,mid,2*n);//为递归建树,n的左节点编号为2*n
build(mid+1,r,2*n+1);//n右节点编号为2*n+1
//以下为树的功能部分,连接每个根节点和两个子树节点的关系,主要有关于num的运算和记 //录
*****************************************************************************
<1>aNode[n].num=aNode[2*n].num+aNode[2*n+1].num;
<2>if (aNode[2 * n].num<= aNode[2 * n + 1].num)
aNode[n].num = aNode[2 * n].num;
else
aNode[n].num = aNode[2 * n + 1].num;
*****************************************************************************
}
}
<1>功能:第n号节点的num,为其两个子节点之和。
<2>功能:第n号节点的num,为其两个子节点中最小值。
{
int l;
int r;
int num;
} aNode[4*N];
int data[N];
void build(int l,int r,int n)//l为build的第一个编号,r为build的尾,n为以第n个节点为当前的根
{
int mid=(l+r)>>1;
aNode[n].l=l;
aNode[n].r=r;
if(l==r)
aNode[n].num=data[l];//为找到当前点为一个叶子,直接赋值
else
{
build(l,mid,2*n);//为递归建树,n的左节点编号为2*n
build(mid+1,r,2*n+1);//n右节点编号为2*n+1
//以下为树的功能部分,连接每个根节点和两个子树节点的关系,主要有关于num的运算和记 //录
*****************************************************************************
<1>aNode[n].num=aNode[2*n].num+aNode[2*n+1].num;
<2>if (aNode[2 * n].num<= aNode[2 * n + 1].num)
aNode[n].num = aNode[2 * n].num;
else
aNode[n].num = aNode[2 * n + 1].num;
*****************************************************************************
}
}
<1>功能:第n号节点的num,为其两个子节点之和。
<2>功能:第n号节点的num,为其两个子节点中最小值。