時間限制
400 ms
記憶體限制
65536 kb
**長度限制
8000 b
判題程式
standard
作者陳越
一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹:對於任一結點,
所謂二叉搜尋樹的「映象」,即將所有結點的左右子樹對換位置後所得到的樹。
給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對一棵二叉搜尋樹或其映象進行前序遍歷的結果。
輸入格式:
輸入的第一行給出正整數n(<=1000)。隨後一行給出n個整數鍵值,其間以空格分隔。
輸出格式:
如果輸入序列是對一棵二叉搜尋樹或其映象進行前序遍歷的結果,則首先在一行中輸出「yes」,然後在下一行輸出該樹後序遍歷的結果。數字間有1個空格,一行的首尾不得有多餘空格。若答案是否,則輸出「no」。
輸入樣例1:
7
8 6 5 7 10 8 11
輸出樣例1:
yes
5 7 6 8 11 10 8
輸入樣例2:
7
8 10 11 8 6 7 5
輸出樣例2:
yes
11 8 10 7 5 6 8
輸入樣例3:
7
8 6 8 5 10 9 11
輸出樣例3:
no
思路:因為題目要求輸出所給出樹的後序,所以先根據題目對樹的定義算出樹的後序,如果求出的後序長度和前序一樣,證明這是題目所定義的樹 因為有原樹和映象兩種,所以算的時候分兩種狀態,一,是映象,二,不是映象 根據題目的定義,節點的左子樹全部的值都小於節點的值,右子樹的值都大於節點的值。
#include#include#includeusing namespace std;
#define maxn 1005
vectorpost;
vectorpre;
int n;
bool ismirror;
void getpost(int root,int tail)
else
if(i-j!=1)return;//若是題目所定義的樹,遍歷之後的下標之差一定為1
//後序,左右中
getpost(root+1,j);//左邊
getpost(i,tail);//右邊
post.push_back(pre[root]);//放根節點
}int main()
ismirror=false;
getpost(0,n-1);
if(post.size()!=n)
if(post.size()!=n)
{ cout<<"no"<
天梯賽 L2 004 這是二叉搜尋樹嗎?
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是...
天梯賽 L2 004 這是二叉搜尋樹嗎 題解
一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,其左子樹中所有結點的鍵值小於該結點的鍵值 其右子樹中所有結點的鍵值大於等於該結點的鍵值 其左右子樹都是二叉搜尋樹。所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對...
L2 004 這是二叉搜尋樹嗎?
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否...