L2 004 這是二叉搜尋樹嗎? (25 分)

2021-09-11 01:41:46 字數 1565 閱讀 3196

l2-004 這是二叉搜尋樹嗎? (25 分)

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

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

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

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

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

7

8 6 5 7 10 8 11

yes

5 7 6 8 11 10 8

7

8 10 11 8 6 7 5

yes

11 8 10 7 5 6 8

7

8 6 8 5 10 9 11

no
#include#include#include#include#includeusing namespace std;

#define maxn 1100

struct tree;

int n;

int num[maxn],pre[maxn],jpre[maxn],later[maxn],jlater[maxn];

int m1,m2,m3,m4;

void create(struct tree *&t,int k)

else

if(k>=t->data) }}

void f1(struct tree *t)

return ;

}int judge(int num,int pre)

}void create1(struct tree *&t2,int k)

else

if(kdata) }}

void f2(struct tree *t2)

return ;

}int judge2(int num,int jpre)

}int main()

m1=0;

//printf("*\n");

f1(t);//前序

//printf("*\n");

/**/

if(judge(num,pre)==1)//判斷前序是否相等

printf("%d\n",later[m2-1]);

}else

m3=0;

f2(t2); //找出前序

/*for(int i=0;i*/

if(judge2(num,jpre)==1)//判斷是否相等

printf("%d\n",jlater[m4-1]);

}else

}return 0;

}

L2 004 這是二叉搜尋樹嗎? (25 分)

一棵二叉搜尋樹可被遞迴地定義為具有下列性質的二叉樹 對於任一結點,所謂二叉搜尋樹的 映象 即將所有結點的左右子樹對換位置後所得到的樹。給定乙個整數鍵值序列,現請你編寫程式,判斷這是否是對一棵二叉搜尋樹或其映象進行前序遍歷的結果。輸入的第一行給出正整數 n 1000 隨後一行給出 n 個整數鍵值,其間...

L2 004 這是二叉搜尋樹嗎? (25 分)

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

L2 004 這是二叉搜尋樹嗎? 25分

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