码迷,mamicode.com
首页 > 其他好文 > 详细

Uva 548 Tree

时间:2016-05-29 22:53:44      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

0.这是一道利用中序遍历和后序遍历确定二叉树的题目,学会建树

关键点理解这段代码

int build(int L1,int R1,int L2,int R2)
{
    //printf("built:\n");
    if(L1>R1) return 0;//空树
    int root=post_order[R2];
    int p=L1;
    while(in_order[p] != root) p++;
    int  cnt = p-L1;//左子树的结点个数
    lch[root]=build(L1,p-1,L2,L2+cnt-1);
    rch[root]=build(p+1,R1,L2+cnt,R2-1);
    return root;
}

1.剩下的就是递归了 注意一下递归边界是  到达叶子结点 即左右子树均为空的结点 就行了

 if(!lch[v] && !rch[v])

 

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <sstream>
 5 #include <algorithm>
 6 using namespace std;
 7 const int maxn=10000 + 5;
 8 int post_order[maxn],in_order[maxn],lch[maxn],rch[maxn];
 9 int n,ans_sum,ans_v;
10 
11 bool input(int*a)
12 {
13     string s;
14     //getline(cin,s);
15     if(!getline(cin,s)) return false;
16     stringstream ss(s);
17     n=0;
18     int x;
19     while(ss>>x) a[n++]=x;
20     return n>0;
21 }
22 
23 int build(int L1,int R1,int L2,int R2)
24 {
25     //printf("built:\n");
26     if(L1>R1) return 0;//空树
27     int root=post_order[R2];
28     int p=L1;
29     while(in_order[p] != root) p++;
30     int  cnt = p-L1;//左子树的结点个数
31     lch[root]=build(L1,p-1,L2,L2+cnt-1);
32     rch[root]=build(p+1,R1,L2+cnt,R2-1);
33     return root;
34 }
35 void dfs(int v,int sum)
36 {
37     sum+=v;
38     if(!lch[v] && !rch[v])
39     {
40         if(sum < ans_sum)
41             ans_sum = sum,ans_v=v;
42         else if(sum == ans_sum && v < ans_v)
43             ans_v = v;
44     }
45     if(lch[v]) dfs(lch[v],sum);
46     if(rch[v]) dfs(rch[v],sum);
47 }
48 int  main()
49 {
50     while(input(in_order))
51     {
52         input(post_order);
53         build(0,n-1,0,n-1);
54         ans_sum=999999999;
55         dfs(post_order[n-1],0);
56         printf("%d\n",ans_v);
57     }
58     return 0;
59 }

 

Uva 548 Tree

标签:

原文地址:http://www.cnblogs.com/luosuo10/p/5540529.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!