資料結構 二叉排序樹

2021-09-25 05:32:57 字數 1630 閱讀 1641

#include #include typedef int status;

//二叉排序樹的結點結構//

typedef struct bitnode*bitree;

//遞迴查詢二叉排序樹中是否存在key值//

//如果存在則讓p指向該節點,如果不存在p指向最後查詢的結點//

//f初始值為空,之後指向正在查詢的結點的雙親結點//

status searchbst(bitree t, int key, bitree f, bitree *p)

else if (t->data == key)

else if (key < t->data)

else if (key > t->data)

}//二叉排序樹的插入操作//

//先查詢key是否在排序樹中,如果不在的話p為指向的最後乙個查詢的結點//

//判斷如果key比p大的話插入p的右孩子那,如果比p小的話插入左孩子那//

status insertbst(bitree *t, int key)

else if (key < p->data)

else if (key > p->data)

else

return false; }}

//二叉排序樹的刪除操作//

//刪除操作有分三種情況//

//只有左子樹,只要把左子樹替換上去就行了//

//只有右子樹,只要把右子樹替換上去就行了//

//既有左子樹,又有右子樹,那麼需要找到該結點的直接前驅(左子樹中最右邊的),或者直接後繼(右子樹中最左邊的)//

status delete(bitree *p)

else if ((*p)->lchild == null)

else if((*p)->lchild != null && (*p)->rchild != null)

//此時q指向直接前驅的前驅,s指向直接前驅

(*p)->data = s->data;//直接賦值上去

if (q != (*p))

else

free(s);

printf("該值左右子樹都不空\n");

} else if ((*p)->lchild == null && (*p)->rchild == null)

printf("刪除完成\n");

return true;

}status deletebst(bitree t, int key)

else if (t->data == key)

else if (key < t->data)

else if (key > t->data)

}int main()

bitree t = t;

system("pause");

system("cls");

while (t->rchild != null)

printf("%d\n", t->data);

searchbst(t, 8, null, &p);

deletebst(t, 0);

searchbst(t, 7, null, &p);

return 0;

}

資料結構 二叉排序樹

二叉排序樹是一種特殊結構的二叉樹,它作為一種表的組織手段,通常被稱為 樹表。可以作為一種排序和檢索的手段。定義 二叉排序樹或是空樹,或是具有下述性質的二叉樹 其左子樹上所有結點的資料值均小於根結點的資料值 右子樹上所有結點的資料值均大於或等於根結點的資料值。左子樹和右子樹又各是一棵二叉排序樹。對二叉...

資料結構 二叉排序樹

二叉排序樹 binarysorttree 具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 3 左 右子樹也分別為二叉排序樹 include includeusing namespace std type...

資料結構 二叉排序樹

如果需要乙個滿足 支援排序性 高效插入 刪除操作 高效查詢的資料結構,怎麼做?先看看一些簡單的資料結構 1 排序順序表 陣列 查詢可以採用折半查詢演算法,時間效率為o log2n 插入 刪除操作的時間複雜度為o n 資料量大時,效率太低。2 排序單鏈表 只能採用順序查詢,時間複雜度為o n 不能採用...