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

2021-09-24 05:59:54 字數 1929 閱讀 8116

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

輸入包含若干組測試資料。每組資料的第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

對於每乙個序列都建一棵樹,進行比較時也有兩種思路

參考:pta 7-3 樹的同構 遞迴實現

思路二:由於中序序列和前序序列(或後序序列)可以唯一確定一棵樹,故只要對兩棵樹分別遍歷,分別獲得中序序列和前序序                 列,比較是否相等即可。

由於均是二叉搜尋樹,中序遍歷的序列一定都是單調遞增的數列,中序序列一定相同,不用遍歷比較。

比較兩個前序序列是否相等可借助vector。

/*思路二***/

#include#include#include#includeusing namespace std;

struct node;

//node tree[12];

int a1[12],a2[12]; //存放輸入的資料

int n,l;

vectorans1,ans2;

node* search(int x,node*root)

else if(xdata) root->lchild=search(x,root->lchild);

else root->rchild=search(x,root->rchild);

return root;

}node* build_tree(int n,int a)

int main()

int main()

;//node tree[12];

int a1[12],a2[12]; //存放輸入的資料

int n,l;

vectorans1,ans2;

/*在查詢失敗的地方插入x*/

node* search(int x,node*root)

else if(xdata) root->lchild=search(x,root->lchild);

else root->rchild=search(x,root->rchild);

return root;

}/*建樹*/

node* build_tree(int n,int a)

/*檢查每個結點是否合法*/

bool check(node*node,int x)

else //當前結點還沒訪問過

else return false; }}

bool judge(node*root,int a)

} return true;

} int main()

node*root1=build_tree(n,a1);

for(int i=0;ipre_order(root1);//對原始序列重置標記

if(judge(root1,a2))

printf("yes\n");

else printf("no\n");

} }return 0;

}

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

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

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

總體思路 採用先序遍歷的方式來進行比較即可。靜態樹 題目描述 給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。輸...

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

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