資料結構實驗之查詢一 二叉排序樹

2021-07-08 13:47:55 字數 1395 閱讀 9320

對應給定的乙個序列可以唯一確定一棵二叉排序樹。然而,一棵給定的二叉排序樹卻可以由多種不同的序列得到。例如分別按照序列和插入初始為空的二叉排序樹,都得到一樣的結果。你的任務書對於輸入的各種序列,判斷它們是否能生成一樣的二叉排序樹。

輸入包含若干組測試資料。每組資料的第1行給出兩個正整數n (n < = 10)和l,分別是輸入序列的元素個數和需要比較的序列個數。第2行給出n個以空格分隔的正整數,作為初始插入序列生成一顆二叉排序樹。隨後l行,每行給出n個元素,屬於l個需要檢查的序列。

簡單起見,我們保證每個插入序列都是1到n的乙個排列。當讀到n為0時,標誌輸入結束,這組資料不要處理。

對每一組需要檢查的序列,如果其生成的二叉排序樹跟初始序列生成的二叉排序樹一樣,則輸出"yes",否則輸出"no"。

4 2

3 1 4 2

3 4 1 2

3 2 4 1

2 12 1

1 20

yesnono

/*非遞迴方式建立排序二叉樹,比較的時候(左左比較右右比較)或者(左右比較和右左比較)有相同的時候判定為同一棵二叉排序樹*/#include #include #include #define lson l , m , rt << 1

#define rson m + 1 , r , rt << 1 | 1

#define ll long long

struct node*root_1,*root_2;

int arr[20];

void insert_node(struct node *root, int data)

curr = new node;

curr->data = data;

tmp = root;

while (tmp != null)

else if(tmp->data <= curr->data)

else if (tmp->data > curr->data)

else }}

else

}}struct node *build(const int *arr, int len)

root = new node;

root->data = arr[0];

for (i = 1; i < len; i++)

return root;

}bool judge(node *root1,node *root2)

else if(root1 == null || root2 == null)

return false;

else

}}int main() {

int n,m;

while(scanf("%d",&n) && n){

scanf("%d",&m);

for(int i=0;i

資料結構實驗之查詢一 二叉排序樹

time limit 400ms memory limit 65536k 有疑問?點這裡 對應給定的乙個序列可以唯一確定一棵二叉排序樹。然而,一棵給定的二叉排序樹卻可以由多種不同的序列得到。例如分別按照序列和插入初始為空的二叉排序樹,都得到一樣的結果。你的任務書對於輸入的各種序列,判斷它們是否能生成...

資料結構實驗之查詢一 二叉排序樹

time limit 400ms memory limit 65536k 有疑問?點這裡 對應給定的乙個序列可以唯一確定一棵二叉排序樹。然而,一棵給定的二叉排序樹卻可以由多種不同的序列得到。例如分別按照序列和插入初始為空的二叉排序樹,都得到一樣的結果。你的任務書對於輸入的各種序列,判斷它們是否能生成...

資料結構實驗之查詢一 二叉排序樹

time limit 400ms memory limit 65536k 有疑問?點這裡 對應給定的乙個序列可以唯一確定一棵二叉排序樹。然而,一棵給定的二叉排序樹卻可以由多種不同的序列得到。例如分別按照序列和插入初始為空的二叉排序樹,都得到一樣的結果。你的任務書對於輸入的各種序列,判斷它們是否能生成...