国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

UVA 548 —— 二叉樹的遞歸遍歷

2019-11-06 06:17:12
字體:
來源:轉載
供稿:網友

已知二叉樹的中序遍歷和后序遍歷,構建二叉樹,求葉子到根的最小路徑權值和;

后序遍歷的最后一個字符即為二叉樹的根結點,然后在中序遍歷中找到這個根結點的位置,根結點的左邊序列即為該根的左子樹,右邊序列即為右子樹,然后再在后序遍歷中找左右子樹的根結點,以此類推,用遞歸遍歷。

#include<bits/stdc++.h>#define INF 0x3f3f3f3fusing namespace std;const int maxn = 1e4+5;int in_order[maxn], post_order[maxn];int lch[maxn], rch[maxn];int cnt;bool read_input(int* a){    cnt = 0;    string s;    if(!getline(cin, s))    return false;    int len = (int)s.size();    int tmp = 0;    for(int i = 0;i<len;i++){        if(s[i] == ' '){            a[cnt++] = tmp;            tmp = 0;            continue;        }        tmp = tmp*10+(s[i]-'0');    }    a[cnt++] = tmp;    if(cnt > 0) return true;    else    return false;}int build(int L1, int R1, int L2, int R2){    if(L1 > R1) return 0;       //空樹    int root = post_order[R2];    int i;    for(i = L1;i<=R1;i++){        if(in_order[i] == root)            break;    }    int k = i-L1;    lch[root] = build(L1, i-1, L2, L2+k-1);    rch[root] = build(i+1, R1, L2+k, R2-1);    return root;}int ans, tmp;void dfs(int u, int sum){    if(u == 0)  return;    sum += u;    if(!lch[u] && !rch[u]){     //葉子        if(ans > sum || (ans == sum && tmp > u)){            ans = sum;            tmp = u;        }        return;    }    dfs(lch[u], sum);    dfs(rch[u], sum);}int main(){    while(read_input(in_order)){        read_input(post_order);        build(0, cnt-1, 0, cnt-1);        ans = INF;        dfs(post_order[cnt-1], 0);        cout<<tmp<<endl;    }    return 0;}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 揭东县| 通河县| 雷州市| 鸡西市| 玉门市| 江门市| 汤原县| 綦江县| 定远县| 罗江县| 吴堡县| 南江县| 汝阳县| 朝阳市| 穆棱市| 恭城| 保靖县| 响水县| 阜新| 潮安县| 福清市| 姚安县| 福泉市| 星座| 南漳县| 兰州市| 石屏县| 姚安县| 登封市| 广德县| 抚宁县| 绵竹市| 朝阳市| 宜城市| 汽车| 江津市| 德江县| 改则县| 金阳县| 电白县| 阿尔山市|