在寫這題的時候,一開始對輸入和輸入並不是很理解,自己寫出來後,也各種報錯,後來看了別人的程式才理解 輸入 是包含了兩次例子,一次是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...