給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。
輸入第一行給出乙個正整數n(≤30),是二叉樹中結點的個數。第二行給出其後序遍歷序列。第三行給出其中序遍歷序列。數字間以空格分隔。
在一行中輸出該樹的層序遍歷的序列。數字間以1個空格分隔,行首尾不得有多餘空格。
723
1576
4123
4567
416
3572
#include
#define ll long long
#define pi acos(-1)
#define mes(x,y) memset(x,y,sizeof(x))
#define fast_io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
const ll inf =
2e9+10;
const ll mod =
1e10+7
;const ll maxn =
2e10+10
;ll n, m, i, j, t, w, sum;
ll a[31]
, flagb[31]
, po[
1785];
void
buildtree
(ll th, ll bea, ll ena, ll beb, ll enb)
//根據中序遍歷確定有左子樹
if(flagb[po[th]
]!= enb)
//根據中序遍歷確定有右子樹
}vectorv[31]
;void
frontbianli
(ll th, ll step)
intmain()
}
#include
#define ll long long
#define fast_io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
const ll maxn =
1e12+10
;ll n, m, i, j, k, t, w, x, y, z, in, flag, cou, sum, maxn, minn;
string s, s1, s2;
const ll inf =
1e9+7;
ll* buildtree ( ll hl, ll hr, ll *hx, ll zl, ll *mm, ll *re )
intmain()
;for
( cin >> n, i =
0; i < n; i++
) cin >> hx[i]
;for
( i =
0; i < n; i++
) cin >> j, mm[j]
= i;
for( cout <<
"preorder:"
, buildtree (
0, n -
1, hx,
0, mm, re )
, i =
0; i < n; i++
) cout <<
" "<< re[i]
;return0;
}
7 3 樹的遍歷 25分
給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。輸入第一行給出乙個正整數n 30 是二叉樹中結點的個數。第二行給出其後序遍歷序列。第三行給出其中序遍歷序列。數字間以空格分隔。在一行中輸出該樹的層序遍歷的序列。數字間以1個空格分隔,行首尾不得有多餘空格。...
7 3 樹的同構(25 分)
給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是 同構 的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a b g的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。圖1 圖2現給定兩棵樹,請你判斷它們是否是同構的。輸入給出2棵二叉樹樹的資訊。對...
7 3 樹的同構 (25 分)
給定兩棵樹t1和t2。如果t1可以通過若干次左右孩子互換就變成t2,則我們稱兩棵樹是 同構 的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點a b g的左右孩子互換後,就得到另外一棵樹。而圖2就不是同構的。圖1 圖2現給定兩棵樹,請你判斷它們是否是同構的。輸入給出2棵二叉樹樹的資訊。對...