這是二叉搜尋樹嗎?(二叉搜尋樹前序轉後序)

2021-09-13 22:55:23 字數 1467 閱讀 3741

輸入樣例 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...