二叉排序樹的建立、查詢和刪除過程及其演算法設計。
(1)由關鍵字序列(4,9,0,1,8,6,3,5,2,7)建立一棵二叉排序樹bt並以括號表示法輸出;
(2)判斷bt是否為一棵二叉排序樹;
(3)採用遞迴和非遞迴兩種方法查詢關鍵字6的節點,並輸出其查詢路徑;
(4)分別刪除bt中關鍵字為4和5的結點,並輸出刪除後的二叉排序。
**://檔名:exp9-4.cpp
#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中的關鍵字建立一棵二叉排序樹
}void delete(bstnode *&p)
//從二叉排序樹中刪除*p節點
else if (p->lchild==null) //*p節點沒有左子樹的情況
else delete1(p,p->lchild); //*p節點既有左子樹又有右子樹的情況
}int deletebst(bstnode *&bt,keytype k)
//在bt中刪除關鍵字為k的節點}}
void searchbst1(bstnode *bt,keytype k,keytype path,int i)
//以非遞迴方式輸出從根節點到查詢到的節點的路徑
else
}int searchbst2(bstnode *bt,keytype k)
//以遞迴方式輸出從根節點到查詢到的節點的路徑
else if (kkey)
searchbst2(bt->lchild,k); //在左子樹中遞迴查詢
else
searchbst2(bt->rchild,k); //在右子樹中遞迴查詢
printf("%3d",bt->key);
}void dispbst(bstnode *bt)
//以括號表示法輸出二叉排序樹bt}}
keytype predt=-32767; //predt為全域性變數,儲存當前節點中序前趨的值,初值為-∞
int judgebst(bstnode *bt) //判斷bt是否為bst
}void main()
,n=10;
printf("建立一棵bst樹:");
printf("\n");
bt=creatbst(a,n);
printf("bst:");dispbst(bt);printf("\n");
printf("bt%s\n",(judgebst(bt)?"是一棵bst":"不是一棵bst"));
printf(" 查詢%d關鍵字(遞迴,順序):",k);searchbst1(bt,k,path,-1);
printf("查詢%d關鍵字(非遞迴,逆序):",k);searchbst2(bt,k);
printf("\n刪除操作:\n");
printf(" 原bst:");dispbst(bt);printf("\n");
printf(" 刪除節點4:");
deletebst(bt,4);
dispbst(bt);printf("\n");
printf(" 刪除節點5:");
deletebst(bt,5);
dispbst(bt);
printf("\n");}
建立二叉排序樹C語言實現
學會編輯 include include 二叉查詢樹結點描述 typedef int keytype typedef struct node node,pnode 往二叉查詢樹中插入結點 插入的話,可能要改變根結點的位址,所以傳的是二級指標 void inseart pnode root,keyty...
二叉排序樹實現(C語言)
include include 定義基本的資料結構和型別預定義 struct treenode typedef struct treenode position typedef struct treenode searchtree typedef int elementtype struct tre...
二叉排序樹 BST 的思路及C語言實現
請注意,為了能夠更好的理解二叉排序樹,我建議各位在看 時能夠設定好斷點一步一步跟蹤函式的執行過程以及各個變數的變化情況 在進行動態查詢操作時,如果我們是在乙個無序的線性表中進行查詢,在插入時可以將其插入表尾,表長加1即可 刪除時,可以將待刪除元素與表尾元素做個交換,表長減1即可。反正是無序的,當然是...