//二叉排序樹
//其中有插入、刪除、查詢操作
#include
#include
#define false 0
#define ture 1
#define maxsize 10
typedef struct bitnode
bitnode, *bitree;
//查詢
//f指向t的雙親,初始時為null
//這裡用f,*p,是問了儲存查詢時遍歷的最後乙個元素,在插入時用
int searchbst(bitree t, int key, bitree f, bitree *p)
else if (key == t->data)
else if (keydata)
return searchbst(t->lchild, key, t, p);
else
return searchbst(t->rchild, key, t, p);
}//插入
//如果插不到元素,獲取查詢時遍歷的最後乙個元素
//與其比較,大則是其右子樹,反之、、
void insertbst(bitree *t, int key)
else
printf("抱歉,樹中已有該元素。 \n");
}//deletebst用到的子函式
//刪除節點無左子樹,則將其右子樹補到現在位置,反之亦然
//若左右字樹都有,則找其左子樹,然後右到底,即中序遍歷時,刪除節點的上乙個元素——前驅
//以前驅作為新節點
void delete(bitree *p)
else if ((*p)->lchild == null) //無左
else
(*p)->data = s->data; //前驅替換刪除節點
if (q != *p)
q->rchild = s->lchild;
else
q->lchild = s->lchild;
free(s);}}
//刪除
void deletebst(bitree *t, int key)
else
printf("抱歉,當前二叉樹中沒有你要刪除的元素。 \n");
}//中序輸出
void inorder(bitree t)
else
return;
}void main()
;for (i = 0; i<10; i++)
printf("當前的二叉樹為:");
inorder(t);
printf("\n");
printf("請輸入你要插入的元素:");
scanf("%d", &num);
insertbst(&t, num);
printf("當前的二叉樹為:");
inorder(t);
printf("\n");
printf("請輸入你要刪除的元素:");
scanf("%d", &num);
deletebst(&t, num);
printf("當前的二叉樹為:");
inorder(t);
printf("\n");
}
二叉排序樹基本操作
1.儲存結構 二叉鍊錶 include include typedef struct bitnode bitnode,bitree 2.二叉排序樹查詢演算法 遞迴查詢二叉排序樹t中是否存在key status search bitree t,int key,bitree f,bitree p p指向...
二叉排序樹基本操作
二叉排序樹,顧名思義,是一種排列好順序的二叉樹。它的排序規則是 每個結點的左子樹上的值都比它本身的值小,右子樹上的值都比它本身的值大。include include define true 1 define false 0 typedef struct binode binode,bitree in...
二叉排序樹基本操作
題目描述 編寫一棵二叉排序樹,來支援以下 6 種操作 插入 x 數 刪除 x 數 若有多個相同的數,因只刪除乙個 如果 x 不存在則不需要刪除 查詢 x 數的排名 排名定義為比當前數小的數的個數 1 如果 x 不存在則輸出 1 查詢排名為 x 的數 如果 x 大於樹中元素個數,則輸出 1 求 x 的...