04 樹4 是否同一棵二叉搜尋樹 25 分

2021-10-01 02:30:48 字數 1485 閱讀 8374

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

輸入包含若干組測試資料。每組資料的第1行給出兩個正整數n (≤10)和l,分別是每個序列插入元素的個數和需要檢查的序列個數。第2行給出n個以空格分隔的正整數,作為初始插入序列。最後l行,每行給出n個插入的元素,屬於l個需要檢查的序列。

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

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

這個題我是用的標準二叉查詢樹建立法進行的構造

不同的是我用的字串比較法

(原理是不同的兩個遍歷樹的方法可以唯一確定乙個樹,

所以我用的先序和中序雜交法產生字串)

但是這個題我糾結了乙個小時找bug,因為我所有的測試案例除了第0個過不了,其他都過了,但是題目還偏偏說是標準測試案例,但是我在本地跑標準測試案例妥妥的。後來他說交換順序。

2 1

2 11 2

4 23 1 10 2

3 10 1 2

3 2 4 1

0

所以這是交換後的順序,然後我因為這個測試點找bug1小時,最後發現是因為寫根節點的時候初始化寫在了迴圈外,導致創造數的時候沒有初始化

#include

#include

using namespace std;

struct bintreen

;typedef bintreen* bintree;

bintree makebintree

(bintree root, int x)

else

if(root-

>data > x)root-

>left =

makebintree

(root-

>left, x)

;else

if(root-

>data < x)root-

>right =

makebintree

(root-

>right, x)

;return root;

}void preorder

(bintree bt, string &s1)

}int main()

bintree bt2;

for(int i =

0; i < m; i++

)//判斷

if(bt1-

>data != bt2-

>data)

printf

("no\n");

else}}

return0;

}

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

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

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

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

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

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