栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

1151 LCA in a Binary Tree (30 分) (前序中序遍历 0/30

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

1151 LCA in a Binary Tree (30 分) (前序中序遍历 0/30

添加链接描述
通过map记录下标 进行遍历,可以直接得到pre的根
这样就不需要k++,在建树的过程中寻找如果下标都在根两边说明找到了最近的点,否则就往两边找

#include
using namespace std;
const int N=1e4+9;
int in[N],pre[N];
int n,q;
int ok=0;
unordered_mappt;
void lca(int inl,int inr,int root,int a,int b){
    if(ok)return;
    if(inrk&&ptb>k){
        lca(k+1,inr,root+(k-inl)+1,a,b);
    }
    else if((ptak)||(pta>k&&ptb>q>>n;
    for(int i=1;i<=n;i++){
        scanf("%d",&in[i]);
        pt[in[i]]=i;
    }
    for(int i=1;i<=n;i++){
        scanf("%d",&pre[i]);
    }
    while(q--){
        int a,b;
        scanf("%d%d",&a,&b);
        if(pt[a]==0&&pt[b]==0){
            printf("ERROR: %d and %d are not found.n",a,b);
        }
        else if(pt[a]==0||pt[b]==0){
            printf("ERROR: %d is not found.n",pt[a]==0?a:b);
        }
        else {
            ok=0;
            lca(1,n,1,a,b);
            
        }
    }


    return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/743671.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号