九度oj题目1385:重建二叉树
生活随笔
收集整理的這篇文章主要介紹了
九度oj题目1385:重建二叉树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目1385:重建二叉樹
時間限制:1 秒
內存限制:32 兆
特殊判題:否
提交:4419
解決:1311
題目描述:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹并輸出它的后序遍歷序列。
?
?
?
輸入可能包含多個測試樣例,對于每個測試案例,
輸入的第一行為一個整數n(1<=n<=1000):代表二叉樹的節點個數。
輸入的第二行包括n個整數(其中每個元素a的范圍為(1<=a<=1000)):代表二叉樹的前序遍歷序列。
輸入的第三行包括n個整數(其中每個元素a的范圍為(1<=a<=1000)):代表二叉樹的中序遍歷序列。
?
對應每個測試案例,輸出一行:
如果題目中所給的前序和中序遍歷序列能構成一棵二叉樹,則輸出n個整數,代表二叉樹的后序遍歷序列,每個元素后面都有空格。
如果題目中所給的前序和中序遍歷序列不能構成一棵二叉樹,則輸出”No”。
?
?
網上別人的代碼,可以借鑒:
1 #include <stdio.h> 2 3 #define MAX 1000 4 5 int to_post(int pre[], int in[], int post[], int n){ 6 int i; 7 int flag1, flag2; 8 9 if (n <= 0) 10 return 1; 11 12 for (i=0; i<n; ++i) 13 if (in[i] == pre[0]) 14 break; 15 if (i >= n) 16 return 0; 17 post[n-1] = pre[0]; 18 flag1 = to_post (pre+1, in, post, i); 19 flag2 = to_post (pre+i+1, in+i+1, post+i, n-i-1); 20 return flag1 && flag2; 21 } 22 23 int main(void){ 24 int pre[MAX], in[MAX], post[MAX]; 25 int n, i; 26 27 while (scanf ("%d", &n) != EOF){ 28 for (i = 0; i < n; ++i) 29 scanf("%d", &pre[i]); 30 for (i = 0; i < n; ++i) 31 scanf("%d", &in[i]); 32 if (to_post (pre, in, post, n)){ 33 for (i = 0; i < n; ++i) 34 printf("%d ", post[i]); 35 putchar('\n'); 36 } 37 else 38 printf("No\n"); 39 } 40 41 return 0; 42 }?
轉載于:https://www.cnblogs.com/Deribs4/p/4647603.html
總結
以上是生活随笔為你收集整理的九度oj题目1385:重建二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信突然出现redirect_uri 参
- 下一篇: CMarkup类在VC中的使用