第十四周 專案三 是否二叉排序樹?

2021-07-08 15:43:46 字數 1639 閱讀 2651

/*

* 檔名稱: main.cpp

* 完成日期:2023年12月06日

* 版本號:codeblocks

** 問題描述: 設計乙個演算法,判斷給定的二叉樹是否是二叉排序樹。

* 輸入描述: 無

* 程式輸出: 見執行結果

*/#include #include #define maxsize 100

typedef int keytype; //定義關鍵字型別

typedef char infotype;

typedef struct node //記錄型別

bstnode;

int path[maxsize]; //全域性變數,用於存放路徑

void dispbst(bstnode *b); //函式說明

int insertbst(bstnode *&p,keytype k) //在以*p為根節點的bst中插入乙個關鍵字為k的節點

else if (k==p->key)

return 0;

else if (kkey)

return insertbst(p->lchild,k); //插入到*p的左子樹中

else

return insertbst(p->rchild,k); //插入到*p的右子樹中

}bstnode *creatbst(keytype a,int n)

//由陣列a中的關鍵字建立一棵二叉排序樹

}}/*

int judgebst(bstnode *bt)為判斷乙個樹是否為排序二叉樹設計的演算法的實現

*/keytype predt=-32767; //predt為全域性變數,儲存當前節點中序前趨的值,初值為-∞

int judgebst(bstnode *bt) //判斷bt是否為bst

}int main()

,n=10;

printf("建立排序二叉樹:");

bt=creatbst(a,n);

dispbst(bt);

printf("\n");

printf("bt%s\n",(judgebst(bt)?"是一棵bst":"不是一棵bst"));

bt->lchild->rchild->key = 30; //搞個破壞!

printf("修改後的二叉樹:");

dispbst(bt);

printf("\n");

printf("bt%s\n",(judgebst(bt)?"是一棵bst":"不是一棵bst"));

return 0;

}

執行結果:

知識點總結:

二叉排序樹的性質:

(1)若它的左子樹非空,則左子樹上所有的值均小於根元素的值;

(2)若它的右子樹非空,則右子樹上所有元素的值均大於根元素的值;

(3)左右子樹本身又各是一顆二叉排序樹。

學習心得:

首先要知原理。

第十四周專案三 是否二叉排序樹

all right reserved 檔名稱 main.cpp 完成日期 2016年12月16日 版本號 v1.0 問題描述 設計乙個演算法,判斷給定的二叉樹是否是二叉排序樹。輸入描述 無 程式輸出 測試資料 include include define maxsize 100 typedef in...

十四周 專案三 是否二叉排序樹

檔名稱 main.cpp 作者 王超 完成日期 2015年12月4日 問題描述 是否二叉排序樹 include include define maxsize 100 typedef int keytype 定義關鍵字型別 typedef char infotype typedef struct no...

第十四周 是否二叉排序樹?

檔名稱 是否二叉排序樹.cpp 作 者 郝環宇 完成日期 2016.12.2 問題描述 設計乙個演算法,判斷給定的二叉樹是否是二叉排序樹。include include define maxsize 100 typedef int keytype 定義關鍵字型別 typedef char infot...