日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

PAT甲级1151 LCA in a Binary Tree (30 分):[C++题解]LCA、最低公共祖先、哈希表映射

發布時間:2025/4/5 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PAT甲级1151 LCA in a Binary Tree (30 分):[C++题解]LCA、最低公共祖先、哈希表映射 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 題目分析
    • 題目鏈接

題目分析



來源:acwing
分析:

和下面這道題幾乎是同一題:PAT甲級1143 Lowest Common Ancestor (30 分):[C++題解]LCA、最低公共祖先
這道題先是根據給定的中序遍歷和先序遍歷,建樹。
建樹的時候需要用到點的深度每個點的父節點是什么。

然后是找LCA,有很多優秀的算法,這里使用樸素做法,O(n)復雜度。思想是:兩個結點a和b,深度深的往上等于它的父節點;如果兩者位于同一層,任意一個往上走等于它的父親,直到兩者相等。相等時就是最低公共祖先。

while( a != b){if(depth[a] < depth[b]) b =p[b];else a = p[a]; }

本題需要注意的使用哈希表pos映射進行離散化到0~n-1,seq數組記錄映射之前的數。因為題目給的數據是int范圍內的,不離散化查找容易超時。離散化代碼:

//讀入中序for(int i = 0; i< n; i++) {cin >> seq[i]; //讀入中序pos[seq[i]] =i; //保存中序序列映射后的值in[i] =i; //中序遍歷映射到0~n-1}//讀入前序for(int i = 0; i<n; i++) {cin >> pre[i];pre[i] = pos[pre[i]]; //前序遍歷進行映射}

ac代碼

#include<bits/stdc++.h> using namespace std; const int N = 10010;int in[N],pre[N],seq[N]; int n, m; unordered_map<int,int> pos; int p[N],depth[N];//根據中序遍歷和前序遍歷建樹 int build( int il ,int ir ,int pl ,int pr ,int d){int root = pre[pl];int k = root;depth [root] = d;if(il < k) p[build(il , k -1 , pl+1, pl+1 + k -1 -il , d+1)] = root;if( k< ir) p[build(k+1,ir ,pl+ k - il+1, pr,d+1)] =root ;return root; }int main(){cin >> m >> n;//讀入中序for(int i = 0; i< n; i++) {cin >> seq[i];pos[seq[i]] =i;in[i] =i; //中序遍歷映射到0~n-1}//讀入前序for(int i = 0; i<n; i++) {cin >> pre[i];pre[i] = pos[pre[i]];}build( 0, n-1, 0, n-1, 0);while(m--){int a, b;cin >> a >> b;if(pos.count(a) && pos.count(b)){a =pos[a],b= pos[b];int x =a, y =b;while(a != b){if(depth[a] > depth[b]) a =p[a];else b=p[b];}if(a != x && b!= y) printf("LCA of %d and %d is %d.\n",seq[x],seq[y],seq[a]);else if(a == x) printf("%d is an ancestor of %d.\n",seq[a],seq[y]);else printf("%d is an ancestor of %d.\n",seq[a],seq[x]);}else if(pos.count(a) == 0 && pos.count(b) ==0) printf("ERROR: %d and %d are not found.\n",a,b);else if(pos.count(a) ==0)printf("ERROR: %d is not found.\n",a);else printf("ERROR: %d is not found.\n",b);} }

題目鏈接

PAT甲級1151 LCA in a Binary Tree (30 分)
https://www.acwing.com/problem/content/1646/

總結

以上是生活随笔為你收集整理的PAT甲级1151 LCA in a Binary Tree (30 分):[C++题解]LCA、最低公共祖先、哈希表映射的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 神马午夜伦理影院 | 国产成人a亚洲精v品无码 | 午夜影院在线 | 亚洲精品影院在线 | 啪啪网站视频 | 亚洲精品网址 | 国产高清露脸 | 强开小受嫩苞第一次免费视频 | www麻豆| 美女视频免费在线观看 | 亚洲二区在线 | 可以看污的网站 | 国产精九九网站漫画 | 亚洲成年人 | 亚洲视频国产视频 | 成片在线观看 | 乱中年女人伦 | 在线播放av网站 | 国产成人手机在线 | 国产精品18久久久久久无码 | 欧美系列第一页 | 日本护士体内she精2xxx | 欧美精品91 | 日本偷偷操 | 免费黄色网址视频 | 亚洲色图10p | 中文字幕国产专区 | 国产视频久久久久久 | 不卡视频一区 | 亚洲一区美女 | 美女av网| www天堂av| 激情青青草 | 最新av免费在线观看 | 超碰在线进入 | 亚洲天堂av中文字幕 | 国产天堂网| 亚洲熟妇丰满大屁股熟妇 | 中文字幕免费视频 | 亚洲中文无码av在线 | 在线免费黄色av | 欧美午夜视频 | 99在线精品视频免费观看20 | 闺蜜张开腿让我爽了一夜 | 在线观看成人网 | 波多野结衣av片 | 一级欧美一级日韩片 | 91成人在线观看喷潮蘑菇 | 精品久久精品久久 | 在线欧美视频 | 日韩国产高清在线 | 欧美成人一区二区视频 | 亚洲综合日韩 | 亚洲一区二区播放 | 99久久久无码国产精品性波多 | 亚洲性视频网站 | 九九九在线视频 | 日韩性生交大片免费看 | 亚洲第一区在线 | 欧美性受视频 | 伊人狼人久久 | 久久在线免费观看 | 亚洲欧美日韩国产成人精品影院 | 亚洲网站视频 | 日本大尺度吃奶做爰视频 | 少妇av片 | 粗喘呻吟撞击猛烈疯狂 | 久久久久久久人妻无码中文字幕爆 | 成人亚洲精品 | 黄页网站在线看 | 青青在线精品 | 黄色顶级片 | 综合色播 | 国产精在线 | 中国在线观看免费视频 | 精品电影一区二区 | 日韩特级毛片 | a国产免费 | 日韩黄色一级大片 | 在线免费看黄av | av片网站| 黄网站在线播放 | 精品国产乱码久久久久久牛牛 | 色在线视频| 激情五月婷婷丁香 | 天堂中文在线官网 | 日产欧产va高清 | 在线观看视频二区 | 男女猛烈无遮挡免费视频 | 日韩美女视频一区 | 色哟哟欧美精品 | 卡一卡二av| av毛片网站 | 亚洲二区在线播放视频 | 强开乳罩摸双乳吃奶羞羞www | 亚洲另类欧美日韩 | 全国男人的天堂网 | 在线观看网址你懂的 | 伊人免费在线观看高清版 |