輸入樣例 1:
78 6 5 7 10 8 11
輸出樣例 1:
yes5 7 6 8 11 10 8
輸入樣例 2:
78 10 11 8 6 7 5
輸出樣例 2:
yes11 8 10 7 5 6 8
輸入樣例 3:
78 6 8 5 10 9 11
輸出樣例 3:
no
#include
using namespace std;
//通過測試
#define fre freopen("c:\\users\\22765\\desktop\\in.txt","r",stdin);
#define mem(a) memset((a),0,sizeof(a))
#define fo(i,a,b) for(int (i)=(a);(i)<(b);(i)++)
#define rep(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
//巨集定義,編譯時展開,占用編譯時間
#define sf(x) scanf("%d",&(x))
//相比函式,減少了執行時間
const
int inf=
(0x7f7f7f7f);
const
int maxn=
1005
;int n;
int a[maxn]
;vector<
int> v;
bool ismirror=0;
//標準二叉搜尋樹:映象二叉樹正好相反
//前序遍歷下:從右往左第乙個小於當前根結點的節點為其左子樹的最後乙個節點
//從左往右,第乙個大於等於當前根節點的節點為其右子樹的第乙個節點
//由左子樹的最後乙個節點可以確定左子樹的區間,由右子樹的第乙個節點可以確實右子樹的區間
//左子樹的最後乙個節點和右子樹的第乙個節點座標相差1,如果不是則不滿足二叉搜尋樹的條件
//遞迴建樹
void
getpost
(int s,
int e)
else
if(l-r!=1)
return
;//類似輸出前序遍歷,中序遍歷,後序遍歷的寫法
//如果 要求輸出中序遍歷,則push_back()操作放在中間
getpost
(s+1
,r);
getpost
(l,e)
; v.
push_back
(a[s]);
}int
main()
if(v.
size()
==n)
}else cout<<
"no"
}
這是二叉搜尋樹嗎?
一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對一棵二叉搜尋樹或其映象進行前序遍歷的結果。輸入格式 輸入的第一行給出正整數n 1000 隨後一行給出n個整數鍵值,...
這是二叉搜尋樹嗎?
一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,其左子樹中所有結點的鍵值小於該結點的鍵值 其右子樹中所有結點的鍵值大於等於該結點的鍵值 其左右子樹都是二叉搜尋樹。所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對...
二叉搜尋樹 映象二叉搜尋樹(前序轉後序 中序)
給出前序,判斷是否為二叉搜尋樹或者映象二叉搜尋樹,若是則輸出其後序遍歷 關鍵 第乙個點為根節點,往後比它小的點是它的左子樹的點,再往後的全部是它右子樹的點,應該全部大於等於它,如果是映象的,那麼只要保證小於就好 void getpost int root,int tail else if i j 1...