L2 004 這是二叉搜尋樹嗎?

2021-07-28 15:00:34 字數 1563 閱讀 4108

時間限制

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 using namespace std;

struct node

;struct node *creat(int x, node *root)

if( x < root->data)

root->l = creat(x, root->l);

else

root->r = creat(x, root->r);

return root;

};int cnt;

int b[1100];

void pre(struct node *root)

}int c[1100];

int cn;

void pre1(struct node *root)

}int f;

void la(struct node *root)

}void la1(struct node *root)

}int main()

pre(root);

pre1(root);

int flag = 0;

for(int i = 0; i < n; i++)

}int flag1 = 0;

for(int i = 0; i < n; i++)

}if(flag&& flag1)

printf("no\n");

else

else if(flag1 == 0)

}}

L2 004 這是二叉搜尋樹嗎?

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否...

L2 004 這是二叉搜尋樹嗎?

一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,其左子樹中所有結點的鍵值小於該結點的鍵值 其右子樹中所有結點的鍵值大於等於該結點的鍵值 其左右子樹都是二叉搜尋樹。所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對...

L2 004 這是二叉搜尋樹嗎?

題目鏈結 題解 這道題目我能想到兩種做法,方法1 直接根據樹的前序遍歷來建樹 分兩種情況 在建樹的過程中,判斷是否滿足二叉搜尋樹的條件,如果不滿足設定標誌位。然後建樹完成以後,對樹進行dfs後序遍歷,這種方法很暴力,也很容易理解,但是 有點繁瑣。方法2 直接在前序遍歷的結果上進行dfs,分成兩個子樹...