数据结构(一)
前序中序求二叉树
a数组存中序遍历,b数组存先序遍历
根据先序遍历节点在中序遍历中的位置,划分其左右子树。
void build(int n,int *a,int *b,tree *&node){
for(int i=1;i<=n;++i){
if(a[i]==b[1]){
node = new tree;
node->data=b[1];
node->ld=NULL;
node->rd=NULL;
build(i-1,a,b+1,node->ld);
build(n-i,a+i,b+i,node->rd);
break;
}
}
}堆的建立
每插入一个节点,判断其与父节点的大小关系并调整
void build(int i){
if(i==1)
return;
while(i!=1){
if(h[i]<h[i/2]){
swap(h[i],h[i/2]);
i/=2;
}
else
break;
}
}
for(int i=1;i<=n;++i){
cin>>h[i];
build(i);
}