PAT 1086 樹的遍歷

2021-10-05 22:27:07 字數 1591 閱讀 4684

給出中序和前序遍歷,求後序遍歷,只不過是間接的給出了遍歷序列

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 是二叉樹中結點的個數。第二行給出其後序遍歷序列。第三行給出其中序遍歷序列。數字間以空格分隔。輸出格式 在一行中輸出該樹的層序遍歷的序列...