From caecc2a714027c19f082228703ecee528d196b5c Mon Sep 17 00:00:00 2001 From: hao14293 Date: Mon, 24 Jun 2019 23:15:48 +0800 Subject: [PATCH] =?UTF-8?q?Create=20L2-011=20=E7=8E=A9=E8=BD=AC=E4=BA=8C?= =?UTF-8?q?=E5=8F=89=E6=A0=91=20(25=20=E5=88=86).cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GPLT/CPP/L2-011 玩转二叉树 (25 分).cpp | 40 ++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 GPLT/CPP/L2-011 玩转二叉树 (25 分).cpp diff --git a/GPLT/CPP/L2-011 玩转二叉树 (25 分).cpp b/GPLT/CPP/L2-011 玩转二叉树 (25 分).cpp new file mode 100644 index 0000000..5ba68a0 --- /dev/null +++ b/GPLT/CPP/L2-011 玩转二叉树 (25 分).cpp @@ -0,0 +1,40 @@ +#include +#include +using namespace std; + +vector InOrder, PreOrder, Level(10000, -1); +// 递归层次遍历 +void getLevel(int root, int start, int end, int index); + +int main(){ + int n, cnt = 0; + cin >> n; + InOrder.resize(n); + PreOrder.resize(n); + //Level.resize(n); + //vector InOrder(n), PreOrder(n), Level(n); + for(int i = 0; i < n; i++) + cin >> InOrder[i]; + for(int i = 0; i < n; i++) + cin >> PreOrder[i]; + getLevel(0, 0, n-1, 0); + for(int i = 0; i < Level.size(); i++){ + if(Level[i] != -1 && cnt != n - 1){ + cout << Level[i] << " "; + cnt++; + }else if(Level[i] != -1){ + cout << Level[i]; + break; + } + } + return 0; +} + +void getLevel(int root, int start, int end, int index){ + if(start > end) return ; + int i = start; + while(i < end && InOrder[i] != PreOrder[root]) i++; + Level[index] = PreOrder[root]; + getLevel(root + 1, start, i - 1, 2 * index + 2); + getLevel(root + 1 + i - start, i + 1, end, 2 * index + 1); +}