二叉排序樹的基本操作

2021-08-01 08:39:13 字數 1658 閱讀 6802

//二叉排序樹

//其中有插入、刪除、查詢操作

#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 的...