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

2021-07-06 03:38:04 字數 2010 閱讀 7502

在寫這題的時候,一開始對輸入和輸入並不是很理解,自己寫出來後,也各種報錯,後來看了別人的程式才理解 輸入 是包含了兩次例子,一次是4個節點,判別2次,一次是2個節點,判別1次。yes和no可以在待判別樹輸入後馬上輸出,不用放到最後一起輸入。

一開始看到這題,我的策略是比較笨的,把被判別樹構造好之後,每次都去把待判別樹構造一邊,然後層序遍歷兩棵樹,比較其結構。寫出來之後,測試例子是正確的,但放到網頁上判定,總是出現 段錯誤。 改了一晚上改不出來,看了別人的程式之後,用另乙個方法開始寫了。

另一種判定方法不需要將待判定樹構造出來,只需要在被判定樹的每乙個節點上加乙個標識位,初始為0,同時建立乙個公共標識位,初始值為0;構造完被判定樹後,逐一輸入待判定的樹的節點值。第乙個值與根節點比較,相同在將被判定樹的標誌位寫1;不同,則將公共標識位寫0;之後的每一位的插入都與構造時一樣,大就往右走,小則往左走,只是停下來的條件不同。構造時,是到下一處為null時停下;判定時,則是當遇到節點的標誌位為0時就停下。然後再進行判定,相同將該節點的標誌位寫1,不同則將公共標識位寫1.

有幾點收穫:1、與其花時間在改乙個不好的方法上,還不如將時間花在尋找乙個巧妙的方法上。2、遞迴的思想要逐漸熟悉起來。

下面附上對應解決程式

#include #include typedef struct _nodenode;

node* creat_node();

node* add_tree(node *root,int number);

node* creat_tree(int number);

void byfloor_tree(node *root,int times);

void free_tree(node *root);

void reset_flag(node *root);

int check(node *root,int tmp);

int main(int argc, char const *argv)

else

for(i=1;iflag)

if(tmpdata)

} if(p->data!=tmp)else

return flag;

}void reset_flag(node *root)

if(root->right)

root->flag=0;

}void free_tree(node *root)

node* creat_tree(int times)

else

}return root;

}node* creat_node()

node* add_tree(node *root, int number)

else

return root;

}

樓下是題目

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

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

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

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

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

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

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

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

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