DataStructure 解釋二叉排序樹

2021-10-04 22:09:52 字數 1813 閱讀 5446

兩組測試資料:

#include

#include

#define endkey 0

typedef

int keytype;

typedef

struct node

bstnode,

*bstree;

void

insertbst

(bstree *t, keytype key)

/*若在二叉排序樹中不存在關鍵字等於key的元素,插入該元素*/

else

if(key <

(*t)

->key)

insertbst(&

((*t)->lchild)

, key)

;/*若插入的key的值小於根節點,則將s插入左子樹*/

else

insertbst(&

((*t)->rchild)

, key)

;/*反之,將s插入右子樹*/

}/******生成二叉排序樹******/

void

createbst

(bstree *t)

}void

preorder

(bstree root)

/*遞迴先序遍歷二叉樹, root為指向二叉樹根結點的指標*/

}bstree searchbst

(bstree bst, keytype key)

/*在根指標bst所指二叉排序樹bst上,查詢關鍵字等於key的結點,若查詢成功,返回指向該元素結點指標,否則返回空指標*/

return

null

;/*查詢失敗*/

}bstnode *

delbst

(bstree t, keytype k)

/*在二叉排序樹t中刪去關鍵字為k的結點*/

if(p==

null

)return t;

斜體樣式第一種情況,當被刪除的的結點p沒有左子樹時

此時p的位置分三種情:

first:p為根節點

second:p不為根,即有雙親結點,且p為雙親結點f的左子樹

third:p不為根,即有雙親結點,且p為雙親結點f的右子樹

if

(p->lchild==

null

)/*p無左子樹*/

else

/*p有左子樹,即 p->lchild != null*/

/*將s的左子樹鏈到q上*/

else

q->rchild=s->lchild;

p->key=s->key;

/*將s的值賦給p*/

free

(s);

}return t;

}void

main()

測試截圖:

DataStructure 8 查詢技術

8.1概述 1 查詢方式分類 靜態查詢 不涉及插入 刪除操作的查詢 動態查詢 涉及插入 刪除操作的查詢 2 查詢結構 線性表 適用於靜態查詢,主要採用順序查詢技術,折半查詢技術.樹表 適用於動態查詢,主要採用二叉排序樹查詢技術.雜湊表 靜態查詢和動態查詢均適用,主要採用雜湊技術.3 查詢演算法的效能...

data structure 之棧與佇列

問題一 用兩個佇列實現乙個棧 思路 定義兩個佇列分別為q1,q2。呼叫棧的push操作時,直接將元素push到佇列q1中,時間複雜度為o 1 呼叫棧的pop操作時,先把q1中的q1.size 1個元素push到q2中,然後再pop出q1中的最後乙個元素,再把q2中的所有元素全部push到q1中,時間...

DataStructure 排序 原始碼實現

本篇部落格實現了 1.氣泡排序 2.氣泡排序的一種優化 當某次冒泡沒有進行交換時,退出迴圈 3.選擇排序 4.歸併排序 5.快速排序。主要是原始碼的實現,並將自己在敲的過程中所遇到的一些問題記錄下來。include include include using namespace std int nu...