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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bLue的二叉树_JAVA

發(fā)布時(shí)間:2025/3/21 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bLue的二叉树_JAVA 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Description

Keke 是一個(gè)喜愛種樹的人,他對(duì)各種樹都有很深的研究。

MLE 聽說 bLue 種了一些新品種的樹,就想邀請(qǐng) Keke 去圍觀一下。

PBH 在暗中把這一切盡收眼底,作為資深植樹行家,他雖不屑,但也決定和他們一起去看一看。

于是,大家便一起到了 bLue 家去看樹。

bLue 有兩棵二叉樹,分別有 n 和 m 個(gè)節(jié)點(diǎn),編號(hào)分別為 1-n 和 1-m,每個(gè)節(jié)點(diǎn)都有一個(gè)權(quán)值,bLue 想知道第一棵樹的所有子樹中與第二棵樹完全相同的個(gè)數(shù)(不考慮節(jié)點(diǎn)編號(hào))。
Input

輸入數(shù)據(jù)有多組(數(shù)據(jù)組數(shù)不超過 150),到 EOF 結(jié)束。

對(duì)于每組數(shù)據(jù):

第一行有兩個(gè)整數(shù) n (0 < n <= 10^5) 和 m (0 < m <= 10^5),表示第一棵樹和第二棵樹的節(jié)點(diǎn)個(gè)數(shù) 接下來 n 行,表示第一棵樹:第 i (0 < i <= n) 行有 3 個(gè)整數(shù),w[i] (0 < w[i] <= 10), lc[i], rc[i] (0 < lc[i], rc[i] <= n),分別表示節(jié)點(diǎn) i 的權(quán)值,該節(jié)點(diǎn)的左孩子編號(hào)和右孩子編號(hào),若某個(gè)孩子不存在,則為 0 (數(shù)據(jù)保證每棵樹都是合法的有根二叉樹) 接下來 m 行,表示第二棵樹:格式同第一棵樹

保證:樹的最大深度不會(huì)超過 10000。
Output

對(duì)于每組數(shù)據(jù),輸出一行一個(gè)整數(shù) num,表示第一棵樹的所有子樹中與第二棵樹完全相同的個(gè)數(shù)。
Sample
Input

7 4

1 6 3

2 0 4

1 7 0

3 0 0

1 2 1

2 0 0

2 0 0

2 0 0

1 4 0

1 1 2

2 0 0

3 3

1 0 0

2 1 3

3 0 0

1 0 3

2 1 0

3 0 0

Output

1

0

Hint

數(shù)據(jù)量比較大,推薦用 scanf 等讀入。

#include<bits/stdc++.h> #define LL long long #define MEM(a, b) memset(a, b, sizeof(a)) using namespace std; struct Node {int w, lc, rc; }; Node a[100005], b[100005]; int avis[100005], bvis[100005]; int na[100005 * 3 + 10], nb[100005 * 3 + 10]; // 包含空節(jié)點(diǎn)所以數(shù)組大小擴(kuò)大3倍 int nest[100005 * 3 + 10]; int la, lb; void adfs(int x) {na[la++] = a[x].w;if(x == 0) return;adfs(a[x].lc);adfs(a[x].rc); } void bdfs(int x) {nb[lb++] = b[x].w;if(x == 0) return;bdfs(b[x].lc);bdfs(b[x].rc); } void Getnest(int n) {int j = 0;int i = 1;nest[1] = 0;while(i <= n){if(j == 0 || nb[i] == nb[j]){j++;i++;if(nb[i] == nb[j])nest[i] = nest[j];elsenest[i] = j;}elsej = nest[j];} } int kmp(int n, int m) {int i = 1;int j = 1;int ans = 0;while(i <= n){if(j == 0 || na[i] == nb[j]){i++;j++;}elsej = nest[j];if(j >= m + 1){ans++;j = nest[j];}}return ans; } int main() {int n, m;while(scanf("%d %d", &n, &m) != EOF){MEM(avis, 0);MEM(bvis, 0);for(int i = 1 ; i <= n ; i++){scanf("%d %d %d", &a[i].w, &a[i].lc, &a[i].rc);avis[a[i].lc]++;avis[a[i].rc]++;}for(int i = 1 ; i <= m ; i++){scanf("%d %d %d", &b[i].w, &b[i].lc, &b[i].rc);bvis[b[i].lc]++;bvis[b[i].rc]++;}la = lb = 1;for(int i = 1 ; i <= n ; i++)if(avis[i] == 0){adfs(i);break;}for(int i = 1 ; i <= m ; i++)if(bvis[i] == 0){bdfs(i);break;}Getnest(lb - 1);int ans = kmp(la - 1, lb - 1);printf("%d\n", ans);} } 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的bLue的二叉树_JAVA的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。