/*問題及**
*all right reserved.
*檔名稱:是否二叉排序樹.cpp
*版本號;v1.0
*問題描述:
設計乙個演算法,判斷給定的二叉樹是否是二叉排序樹。
*輸入描述:用二叉樹的形式輸入數字
*程式輸出:判斷結果
*/
#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;
}
執行結果
知識點總結
這個程式說白了就是判斷這個二叉樹是否按折半查詢的方式排列的數字。巨集觀來說很簡單,就是拿二叉樹中所有「小樹」的根節點與其左右節點比較。
學習心得
知原理的題一定一定要好好做,在紙上的實踐更容易明白細的知識點。
第十四周專案三
檔名稱 jcy 作 者 賈存鈺 完成日期 2017 年 12 月 7 日 問題描述 實現b 樹的基本操作。基於序列完成測試。1 建立對應的3階b 樹b,用括號法輸出b樹。2 從b中分別刪除關鍵字為8和1的節點,用括號法輸出刪除節點後的b樹。輸入描述 無需輸入 程式輸出 實現各種演算法的函式的測試結果...
第十四周 查詢 專案三
計算機控制工程學院 班級 計156 2 姓名 陳飛 問題及 include include define maxsize 100 typedef int keytype 定義關鍵字型別 typedef char infotype typedef struct node 記錄型別 bstnode in...
第十四周 專案1(2)
問題描述及 ifndef btree h included define btree h included 煙台大學計控學院 作 者 王力源 完成日期 2016年12月8日 問題描述 請用 共n 25據,每塊資料個數s 5作為資料表,自行構造索引表,分別對查詢85測試。endif btree h i...