您的位置:首页 > 其它

1385重建二叉树

2013-07-01 21:49 204 查看
剑指offer

题目1385:重建二叉树

print1前序遍历,判断二叉树是否合法,即与输入的二叉树是否匹配,若不匹配输出No;

print2后序遍历输出答案;

#include <stdio.h>
int idx[1001],b[1001];
typedef  struct node
{
struct node * lson,*rson;
int value;
}node,*root;
node tree[1001];
root build(int l,int r)
{
int i,midx,mval=10000;
if(l > r)return NULL;
for(i=l;i<=r;i++)if(mval>b[i]){mval = b[i],midx = i;}
tree[midx].lson = build(l, midx-1);
tree[midx].rson = build(midx+1,r);
tree[midx].value = mval;
return (&tree[midx]);

}
int num;
int print1(root ROOT)
{
if(ROOT == NULL)return 0;
//printf("%d ",ROOT->value);
if(num++!=idx[ROOT->value])return -1;
int f1 = print1(ROOT->lson);
int f2 = print1(ROOT->rson);
return (f1<f2?f1:f2);

}
void print2(root ROOT)
{
if(ROOT == NULL)return;
print2(ROOT->lson);
print2(ROOT->rson);
printf("%d ",ROOT->value);

}

int main(int argc, const char * argv[])
{
int n,i,a;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&a);
idx[a] = i;
}
for(i=0;i<n;i++)
scanf("%d",b+i);
root ROOT = build(0, n-1);
num =0;
if(print1(ROOT)==-1)printf("No\n");
else
{
print2(ROOT);
printf("\n");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: