這是二叉搜尋樹嗎?(建樹 先序 後序)

2021-07-29 11:12:10 字數 1585 閱讀 6363

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

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

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

輸入格式:

輸入的第一行給出正整數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
題意就是現在給你n個數
判斷這n個數是不是二叉排序樹或二叉排序樹的映象,是哪個就輸出哪棵樹的後序遍歷,都不是就輸出no
#include #include#includeusing namespace std;

struct tree;

int xian1[1005],num=0;

tree *creatree(tree *&bt,int a)//建立正常的二叉排序樹tree *&bt是給傳進來的值起個別名,

//這樣的話就會自然的將bt的值帶回去

else

else

creatree(bt->r,a);

}}void creatree1(tree *&bt,int a)//建立二叉排序樹的映象

else

else

creatree1(bt->r,a);

}}void xian(tree *b)//對樹的先序遍歷

}void houxu(tree *b)//對樹的後序遍歷

}int main()

tree *c=null;

//printf("fdsf");

for(int i=0;i//printf("ssdsadsa\n");

xian(b);//先來個先序

int flag=0;

for(int i=0;i}

if(flag!=1)//判斷是不是第一棵樹的先序

printf("\n");

return 0;

}else

}if(flag!=2)

printf("\n");

return 0;

}else

printf("no\n");

}return 0;

}

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

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

這是二叉搜尋樹嗎?

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

這是二叉搜尋樹嗎?

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