L2 004 這是二叉搜尋樹嗎?

2021-10-20 20:00:17 字數 1930 閱讀 2870

一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹:對於任一結點,

1.其左子樹中所有結點的鍵值小於該結點的鍵值;

2.其右子樹中所有結點的鍵值大於等於該結點的鍵值;

3.其左右子樹都是二叉搜尋樹。

所謂二叉搜尋樹的「映象」,即將所有結點的左右子樹對換位置後所得到的樹。

給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對一棵二叉搜尋樹或其映象進行前序遍歷的結果。

輸入格式:

輸入的第一行給出正整數 n(≤1000)。隨後一行給出 n 個整數鍵值,其間以空格分隔。

輸出格式:

如果輸入序列是對一棵二叉搜尋樹或其映象進行前序遍歷的結果,則首先在一行中輸出 yes ,然後在下一行輸出該樹後序遍歷的結果。數字間有 1 個空格,一行的首尾不得有多餘空格。若答案是否,則輸出 no。

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

#include

using

namespace std;

typedef

struct node

bstnode;

intinsertbst

(bstnode *

&p,int k)

else

if(k==p-

>data||k>p-

>data)

return

insertbst

(p->rchild,k)

;else

return

insertbst

(p->lchild,k);}

bstnode *

creatbst

(int a,

int n)

return bt;

}int m=

0,c[

1000];

void

preorder1

(bstnode *bt)

//這棵樹前序遍歷的結果儲存在c中

}int t=

0,d[

1000];

void

preorder2

(bstnode *bt)

}void

swap

(bstnode *b,bstnode *

&t)}

int p=0;

void

postorder1

(bstnode *b)

}int q=0;

void

postorder2

(bstnode *b)

}boolf(

int a,

int b,

int n)

intmain()

swap

(bt,t)

;//若不相同,判斷是否是其映象進行前序遍歷的結果

preorder2

(t);if(

f(a,d,n)

&&flag!=1)

//判斷與輸入是否相同,若相同,則是其映象進行前序遍歷的結果

if(flag==1)

postorder1

(bt)

;else

if(flag==2)

postorder2

(t);

else cout<<

"no"

;//輸入序列不是對一棵二叉搜尋樹或其映象進行前序遍歷的結果

return0;

}

L2 004 這是二叉搜尋樹嗎?

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

L2 004 這是二叉搜尋樹嗎?

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

L2 004 這是二叉搜尋樹嗎?

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