給出中序和前序遍歷,求後序遍歷,只不過是間接的給出了遍歷序列
sample input:
6
push 1
push 2
push 3
poppop
push 4
poppop
push 5
push 6
poppop
sample output:
4 2 6 5 1
先是對輸入的處理,可以直接用string,然後判斷第二個字元是什麼來判斷是輸入還是輸出,棧的話不需要手寫棧,直接用stl就行
push的順序就是他的前序遍歷,pop出的序列是中序遍歷
在處理完輸入後就會得到兩個序列了
這次使用重構整棵樹的方法來進行遍歷,下標變換的話太繞了
對於每個序列,前序遍歷的第乙個一定是這串串行的根節點,然後去中序遍歷中找到這個節點的位置,則這個節點的左邊是他的左子樹,右邊是右子樹,然後遞迴進行構樹,具體的遞迴細節和遞迴出口在下面的**中進行解釋
#include
#include
#include
#include
using
namespace std;
struct node
;stack<
int> s;
int inorder[31]
;int preorder[31]
;int postorder[31]
;int n;
node*
creat
(int prel,
int prer,
int inl,
int inr)
}int numleft = k - inl;
root-
>lchild =
creat
(prel +
1, prel + numleft, inl, k -1)
; root-
>rchild =
creat
(prel + numleft +
1, prer, k +
1, inr)
;return root;
}int num =0;
void
postorder
(node* root)
postorder
(root-
>lchild)
;postorder
(root-
>rchild)
;printf
("%d"
, root-
>data)
; num++;if
(num < n)
printf
(" ");
}int
main()
else
} node* root =
creat(0
, n -1,
0, n -1)
;postorder
(root)
;return0;
}
C程式 PAT 1086 就不告訴你
做作業的時候,鄰座的小盆友問你 五乘以七等於多少?你應該不失禮貌地圍笑著告訴他 五十三。本題就要求你,對任何一對給定的正整數,倒著輸出它們的乘積。輸入在第一行給出兩個不超過 1000 的正整數 a 和 b,其間以空格分隔。在一行中倒著輸出 a 和 b 的乘積。思路分析 題目很簡單 需要注意的是逆過來...
PAT 1086 就不告訴你(15 分) 乙級
做作業的時候,鄰座的小盆友問你 五乘以七等於多少?你應該不失禮貌地圍笑著告訴他 五十三。本題就要求你,對任何一對給定的正整數,倒著輸出它們的乘積。輸入格式 輸入在第一行給出兩個不超過 1000 的正整數 a 和 b,其間以空格分隔。輸出格式 在一行中倒著輸出 a 和 b 的乘積。輸入樣例 5 7 輸...
樹的遍歷 pat
給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。輸入格式 輸入第一行給出乙個正整數 nn n 30 le 30 30 是二叉樹中結點的個數。第二行給出其後序遍歷序列。第三行給出其中序遍歷序列。數字間以空格分隔。輸出格式 在一行中輸出該樹的層序遍歷的序列...