C語言二叉搜尋樹

2021-08-28 08:39:29 字數 1494 閱讀 5948

7-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

**實現

#include#includetypedef struct treenode *tree;

struct treenode

;tree maketree(int n);

tree insert(tree t, int v);

tree newnode(int v);

int check(tree t, int v);

void resett(tree t);

void freetree(tree t);

int judge(tree t, int n);

int main()

else

resett(t); // 清楚t中的標記

} freetree(t);

scanf_s("%d", &n);

} return 0;

}// 建立新的節點

tree newnode(int v)

// 插入新的節點

tree insert(tree t, int v)

return t;

}tree maketree(int n)

return t;

}void resett(tree t)

void freetree(tree t)

int check(tree t, int v)

else if (v > t->v)

else return 0;

} else

return 0; }}

int judge(tree t, int n)

else

t->flag = 1;

for (i = 1; i < n; i++)

if (flag)

return 0;

else

return 1;

}

二叉搜尋樹(C語言)

學習二叉搜尋樹的過程中,對於刪除操作中的兩個節點都存在的情況進行 編寫時,出現了疑惑,所以我著重講解一下刪除操作 首先進行資料的宣告 include includetypedef int data type 宣告元素型別 typedef struct bst nodebst t,bst p 傳入根節...

C語言 二叉搜尋樹

實現過程 二叉查詢樹 binary search tree 又 二叉搜尋樹,二叉排序樹 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉排序樹。簡而言之...

C語言搜尋二叉樹

今天和大家分享乙個二叉搜尋樹的實現演算法,二叉搜尋樹是若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值,如下圖 為了能讓這個樹更加完整,不那麼散亂,我將他包裝起來成為一棵樹,然後想,一棵樹裡要寫啥,那肯定是要乙個根節點啦,於是...