前序中序還原二叉樹並且翻轉左右子樹輸出

2021-10-03 05:23:00 字數 1103 閱讀 4584

給定乙個二叉樹的中序遍歷序列和前序遍歷序列,先將樹左右翻轉(對於每個非葉結點,左右子樹互換),然後輸出翻轉後樹的層序遍歷。二叉樹每個結點的值不同。

第一行乙個整數 n(1 <= n <= 30)n(1≤n≤30) ,表示二叉樹結點個數。

第二行n個整數,表示二叉樹的中序遍歷序列。

第三行n個整數,表示二叉樹的前序遍歷序列。

二叉樹每個結點的值為不超過 109 的正整數。

輸出一行,包含n個整數,表示翻轉後二叉樹的層序遍歷序列。

3

2 1 3

1 2 3

1 3 2

題目所給的結點值範圍為109但是我們陣列不可能開的那麼大,所以我們先對結點進行編號,然後進行反向對映出原有結點的值。

#include

#include

#include

#include

#include

using

namespace std;

const

int n=35;

int a[n]

,b[n]

,d[n]

,son[n][2

];void

dfs(

int x1,

int y1,

int x2)

int len1=pos-x1,len2=y1-pos;

if(len1>0)

if(len2>0)

}int

main()

for(

int i=

1;i<=n;i++

)dfs(1

,n,1);

for(

int i=

1;i<=n;i++

) queue<

int> q;

q.push

(b[1])

;while

(!q.

empty()

) cout << d[q.

front()

]<< endl;

}

還原二叉樹(前序 中序求二叉樹)

給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入首先給出正整數n 50 為樹中結點總數。下面2行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區別大小寫 的字串。輸出為乙個整數,即該二叉樹的高度。此題為利用先序和中序來構造整顆二叉樹,關鍵在於利用先序序列 根左...

前序中序和中序後序還原二叉樹

前序中序還原二叉樹 struct node creat int len,char str1,char str2 由先序序列和中序序列建立二叉樹 root lchild creat i,str1 1,str2 建立左子樹 root rchild creat len i 1,str1 i 1,str2 ...

二叉樹的重構 前序 後序 中序還原二叉樹

只要知道前序 後序 中序就可以還原二叉樹。前序 中序 preorder gdafemhz inorder adefghmz 通過前序我們可以找到根節點為g,之後在中序中我們中序遍歷的特性找到g的左子樹adef和右子樹mhz。之後在通過前序找到左子樹的根節點d,那麼左子樹的左子樹為a,左子樹的右子樹為...