判斷是否同一棵二叉搜尋樹

2021-10-04 06:48:05 字數 2049 閱讀 2771

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

輸入格式:

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

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

輸出格式:

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

輸入樣例:

4 23 1 4 2

3 4 1 2

3 2 4 1

2 12 1

1 20

輸出樣例:

yesno

no方法一:建一棵樹,另外的序列與之比較

#include

#include

typedef

struct treenode *tree;

struct treenode

;tree insert

(tree t,

int data)

else

if(datadata) t->left=

insert

(t->left,data)

;//必須形成等式,要不返回的東西沒有接收,而且這裡需要的是根,不是插入的位置

else

if(data>t->data) t->right=

insert

(t->right,data)

;return t;

}int

check

(tree t,

int data)

if(t->flag==0)

else

return0;

}}intjudge

(tree t,

int n)

if(flag==0)

return0;

else

return1;

}void

resett

(tree t)

void

freet

(tree t)

intmain()

for(i=

0;i)freet

(t);

scanf

("%d"

,&n);}

return0;

}

方法二:構造兩棵搜尋二叉樹,再類似同構去做

#include

#include

typedef

struct treenode *tree;

struct treenode

;tree insert

(tree t,

int data)

else

if(datadata) t->left=

insert

(t->left,data)

;else

if(data>t->data) t->right=

insert

(t->right,data)

;return t;

}tree maketree

(tree t,

int n)

return t;

}int

issome

(tree t1,tree t2)

void

freet

(tree t)

intmain()

freet

(t1)

;scanf

("%d"

,&n);}

return0;

}

判斷是否同一棵二叉搜尋樹(二叉搜尋樹)

輸入包含若干組測試資料。每組資料的第1行給出兩個正整數n 10 和 l,分別是每個序列插入元素的個數和需要檢查的序列個數。第2行給出 n個以空格分隔的正整數,作為初始插入序列。最後 l行,每行給出 n個插入的元素,屬於 l個需要檢查的序列。簡單起見,我們保證每個插入序列都是1到 n的乙個排列。當讀到...

是否同一棵二叉搜尋樹

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

是否同一棵二叉搜尋樹

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