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