資料結構 八 二叉排序樹

2021-09-22 12:29:48 字數 2380 閱讀 1335

基本操作:

建立bst;

查詢;插入乙個節點;

中序遍歷(將得到遞增序列);

刪除乙個節點;

#include

#include

#include

#pragma warning(disable:4996)

typedef

struct mybst

bst;

bst *

create()

;//建立bst

bst *

insert

(bst *t,

int x)

;//插入乙個節點

bst *

search1

(bst *t,

int x)

;//遞迴查詢

bst *

search2

(bst *t,bst *

*p1,

int x)

;//非遞迴查詢,返回查詢節點和前驅

void

inorder

(bst *t)

;//中序遍歷

bst *

dele

(bst *t,

int x)

;//刪除乙個節點的完全非遞迴實現

bst *

dele1

(bst *t,

int x)

;//刪除乙個節點的半遞迴實現

main()

printf

("中序遍歷結果:\n");

inorder

(t);

printf

("\n");

printf

("請輸入乙個要刪除的數:");

scanf

("%d"

,&x)

; t=

dele

(t,x)

;printf

("中序遍歷結果:\n");

inorder

(t);

printf

("\n");

printf

("請輸入乙個要刪除的數:");

scanf

("%d"

,&x)

; t=

dele1

(t,x)

;printf

("中序遍歷結果:\n");

inorder

(t);

printf

("\n");

}bst *

create()

//建立bst

return t;

}bst *

insert

(bst *t,

int x)

//插入乙個節點

else

if(t->data==x)

return t;

else

if(x > t->data)

else

}bst *

search1

(bst *t,

int x)

//遞迴查詢

bst *

search2

(bst *t, bst *

*p1,

int x)

//非遞迴查詢,返回查詢節點和前驅

else

}return

null

;//如果沒有找到,返回null

}void

inorder

(bst *t)

//中序遍歷

}bst *

dele

(bst *t,

int x)

//刪除乙個節點的完全非遞迴實現

else

//對出度進行討論

//找到之後,替換值

p->data=q->data;

//刪除之

if(q == q1->left)

else

return t;

}else

//出度小於2

else

else}}

}}bst *

dele1

(bst *t,

int x)

//刪除乙個節點的半遞迴實現

else

if(t->data == x)

//找到之後,替換值

t->data=q->data;

//刪除節點

if(q == q1->left)

else

return t;

}else

//至少有一空子樹

}else

if(x>t->data)

else

}

資料結構 八 二叉樹

二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉樹遍歷,就是按一定的規則和順序走遍二叉樹的所有結點,使每乙個結點都被訪問一次,而且只被訪問一次。設l d r分別表示遍歷左子樹 訪問根結點和遍歷右子樹,則對一棵二叉樹...

資料結構(八)二叉樹遍歷

二叉樹是一種樹形結構,遍歷就是要讓樹中的所有節點被且僅被訪問一次,即按一定規律排列成乙個線性佇列。二叉 子 樹是一種遞迴定義的結構,包含三個部分 根結點 n 左子樹 l 右子樹 r 根據這三個部分的訪問次序對二叉樹的遍歷進行分類,總共有6種遍歷方案 nlr lnr lrn nrl rnl和lnr。研...

資料結構(八)二叉堆 及排序

以下是我學習二叉堆的總結 include include 時間複雜度 o log n 空間複雜度 o 1 int tree 和 int size 合起來表示裝堆的值的陣列 int rootidx 表示要調整的結點的下標 向下調整的 void adjustdown int tree,int size,...