給定乙個二叉樹的中序遍歷序列和前序遍歷序列,先將樹左右翻轉(對於每個非葉結點,左右子樹互換),然後輸出翻轉後樹的層序遍歷。二叉樹每個結點的值不同。
第一行乙個整數 n(1 <= n <= 30)n(1≤n≤30) ,表示二叉樹結點個數。
第二行n個整數,表示二叉樹的中序遍歷序列。
第三行n個整數,表示二叉樹的前序遍歷序列。
二叉樹每個結點的值為不超過 109 的正整數。
輸出一行,包含n個整數,表示翻轉後二叉樹的層序遍歷序列。
32 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,左子樹的右子樹為...