1385重建二叉树
2013-07-01 21:49
204 查看
剑指offer
题目1385:重建二叉树
print1前序遍历,判断二叉树是否合法,即与输入的二叉树是否匹配,若不匹配输出No;
print2后序遍历输出答案;
题目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"); } } }
相关文章推荐
- 剑指offer——题目1385:重建二叉树
- 题目1385:重建二叉树
- 1020. Tree Traversals (25)-PAT 题目1385:重建二叉树
- 【剑指Offer面试编程题】题目1385:重建二叉树--九度OJ
- 九度OJ-剑指offer-题目1385:重建二叉树
- 九度OJ_1385:重建二叉树
- 【剑指Offer面试编程题】题目1385:重建二叉树--九度OJ
- 题目1385:重建二叉树
- 九度OJ 1385 重建二叉树
- 【剑指Offer面试题】 九度OJ1385:重建二叉树
- 九度OJ 1385 重建二叉树
- 剑指offer之重建二叉树 九度1385
- 剑指OFFER之重建二叉树(九度OJ1385)
- 九度OJ-题目1385:重建二叉树
- [剑指offer-1385]重建二叉树
- 剑指Offer - 九度1385 - 重建二叉树
- 题目1385:重建二叉树
- 【剑指Offer面试题】 九度OJ1385:重建二叉树
- 题目1385:重建二叉树
- 【九度OJ1385】|【剑指offer6】重建二叉树