7 4 是否同一棵二叉搜尋樹

2021-09-02 10:18:35 字數 1613 閱讀 3301

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

輸入包含若干組測試資料。每組資料的第1行給出兩個正整數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

yes

nono

根據題目意思可得,我們需要判斷兩個序列是否對應相同的二叉搜尋樹,求解思路有多種,例如:

1.我們可以分別建立兩個二叉搜尋樹進行判別,分別遞迴判斷其左右子樹是否相同;

2.不建樹的判別方法;比如對於序列3 1 4 2和3 2 4 1,我們首先比較第乙個數字(根結點),若不相同,則肯定不是相同的二叉樹;其次把序列1和2中比根結點小的數放在根結點左邊,大的放在右邊,則序列變為1 2 3 4和2 1 3 4;然後分別比較根結點左邊序列和右邊序列,看是否相同。

3.建立一棵樹,在判別其他序列是否與該樹一致。

我們這裡主要講述第3種方法。因此我們的程式框架為:

int main()

那麼我們首先需要解決的便是如何建立搜尋樹t 。我們可以利用二叉搜尋樹的插入演算法,如下:

/**********二叉搜尋樹插入演算法***********/

bintree insert(int x,bintree bst)

else

return bst;

}

我們只需要連續插入n次,就可以構成乙個搜尋樹了。

bintree maketree(int n)

;

判別函式如下:

int check(bintree bst,int x)

elseelse

} }

int judge(bintree bst,int n)

;position maketree(int n);

int judge(bintree bst,int n);

void resettree(bintree bst);

void freetree(bintree bst);

int main()

else

return bst;

}position maketree(int n)

elseelse

} }

int judge(bintree bst,int n)

}void freetree(bintree bst)

}

7 4 是否同一棵二叉搜尋樹

7 4 是否同一棵二叉搜尋樹 25 分 給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。輸入包含若干組測試資料。...

7 4 是否同一棵二叉搜尋樹

7 4 是否同一棵二叉搜尋樹 25 分 給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。輸入包含若干組測試資料。...

7 4 是否同一棵二叉搜尋樹(25 分)

給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。輸入包含若干組測試資料。每組資料的第1行給出兩個正整數n 10 ...