思路:
根據前序性質,每一顆子樹的前序第乙個節點永遠是其根節點(後序也有類似性質,所以知道後序中序求前序是乙個道理)。
根據中序性質,在中序序列中,某節點之前的節點全在其左邊,反之在其右邊。
那麼我們在前序序列中找到當前樹根節點時,再在中序序列中找到樹根節點的位置,那麼知道中序序列中,在根節點以前的節點都是其左子樹,之後的是右子樹,這樣就可以遞迴建這兩棵樹,這裡我們選擇直接列印後序序列,列印順序為遞迴左子樹,遞迴右子樹,列印自身。
**如下:
#include #include#include
#include
#include
using
namespace
std;
vector
ans;
vector
v1,v2;
void dfs(int a,int b,int
cnt)
else
if(cnt <= 0) return
;
inti;
for(i=0;v1[a] != v2[b+i];i++);
dfs(a+1
,b,i);
dfs(a+i+1,b+i+1,cnt-i-1
); ans.push_back(v1[a]);
return;}
intmain()
for(int i=0;i)
dfs(
0,0,n);
printf("%d
",ans[0
]);
for(int i=1;i)
printf("%d
",ans[i]);
puts(
"");
}return0;
}
二叉樹 已知前序和中序,求後序
題目描述 若某二叉樹的前遍歷訪問順序是序abdgcefh,中序遍歷順序是dgbaechf,則後序遍歷的訪問順序是什麼。若某二叉樹的前遍歷訪問順序是序abdgcefh,中序遍歷順序是dgbaechf,則後序遍歷的訪問順序是什麼。分析 首先要明確乙個基礎的問題,前序遍歷的順序是 根 左 右 中序遍歷的順...
二叉樹遍歷(前序,中序,後序
二叉樹的遍歷有三種方式,如下 1 前序遍歷 dlr 首先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。簡記根 左 右。2 中序遍歷 ldr 首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。簡記左 根 右。3 後序遍歷 lrd 首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點。簡記左 右 根。例1 如上圖...
前序中序出後序 二叉樹
描述 輸入一棵二叉樹的先序和中序遍歷序列,輸出其後序遍歷序列。輸入輸入檔案為tree.in,共兩行,第一行乙個字串,表示樹的先序遍歷,第二行乙個字串,表示樹的中序遍歷。樹的結點一律用小寫字母表示。輸出輸出檔案為tree.out,僅一行,表示樹的後序遍歷序列。樣例輸入 abdec dbeac 樣例輸出...