前言,以前搞過線段樹,二叉樹覺得也就那樣= =、然後資料結構的課也沒怎麼聽過,然後下週期中考。。。
本來以為今天英語考完可以好好搞acm了,然後這個資料結構期中考感覺會丟人,還是好好學習一波。
二叉搜尋樹(bst,binary search tree)
又稱二叉排序樹或二叉查詢樹。
二叉搜尋樹 是一棵二叉樹,它可以為空。
特性(保證鍵值都不相同):
①:非空左子樹的所有鍵值都小於根節點的鍵值;
②:非空右子樹的所有鍵值都大於根節點的鍵值;
③:左右子樹都是bst;
二叉樹的遍歷方式中序,後序,前序不說了。。
直接說與bst操作相關的操作吧。。。。。。(自以為是由易到難的順序講的)
先小小地定義一下~
typedef
int elementtype;
//elementtype 就是 int 的意思(要問我啥意思呢。。。就是你看elementtype這個詞的意思:元素型別(是吧,我就看得懂type,前面瞎說是型別的意思,嘿嘿,平常用typedef就是為了偷懶。。)
typedef
struct tnode *position;
//這些小東西不多講了= =、指標不會就先去學指標,話說弱弱有乙個很不錯的指標講義。需要的可以聯絡。。
typedef position bintree;
struct tnode;
感覺插入就比較好理解???(三個反問號強行理解)
前面已經說過左右結點鍵值和根結點鍵值的關係,
通俗地講每次插入的時候比根的值小就放到左邊(左兒子)去,比他大放到右邊(右兒子)去;
細節方面還要考慮 這個bst是不是空的啊,還有以這個x值在這棵bst裡面有沒有啊;
bintree insert(bintree bst,elementtype x)
else
//額。。這個理解嘛。①:如果這棵bst就是空的,那麼你看直接建立,插然後返回,就是根節點對吧(這棵bst就乙個結點;②:如果不是空的,那麼就一直下去啊下去啊下去啊,搜到可以插的位置,插,返回的是插入結點。但是你可以看到中間的函式並沒有接什麼值,最後還是返回了根結點
return bst;
}
插入也是蠻好理解,還是利用特性嘛。
對於給定的元素,就去找就好啦。還是和根結點比較一下,比他小就看左邊,比他大就看右邊,找到就返回唄。
細節就是本身就是一棵空樹,那就直接返回空就好啦;
找到直接返回指標就好了;
position find(bintree bst , elementtype x)
這裡還有兩個操作查詢最小最大元素。
按照bst的特性我們就會知道,小的一直往左邊偏,大的一直往右邊偏。所以最小的就是最左邊那個啊,最大就是最右邊那個啊
查詢最小:
position findmin(bintree bst)
查詢最大:
position findmax(bintree bst)
1.如果待刪除的結點沒有孩子結點,那麼直接刪除就好了;
2.如果待刪除的結點只有乙個孩子結點,那麼讓孩子結點頂替他的位置;
3.如果待刪除的結點有兩個孩子結點,一種方法是拿左子樹的最大元素來頂替他的位置,另一種方法是拿右子樹的最小元素來頂替他的位置;
= =自己畫畫應該就懂了吧;
bintree delete(bintree bst,elementtype x)
if(x>bst->
data) //右子樹遞迴刪除
bst->right=delete(bst->right,x);
else
if(x
data) //左子樹遞迴刪除
bst->left=delete(bst->left,x);
else
//找到
else
//待刪除的結點沒有子結點或只有乙個
}return bst; //最後返回,傳下來的bst,因為一直都是遞迴啊~
}
二叉搜尋樹BST
在二叉搜尋樹b中查詢x的過程為 1.若b是空樹,則搜尋失敗,否則 2.若x等於b的根結點的資料域之值,則查詢成功 否則 3.若x小於b的根結點的資料域之值,則搜尋左子樹 否則 4.查詢右子樹 指標parent指向proot的父節點,其初始呼叫值為null 若查詢成功,指標ptarget指向目標節點,...
二叉搜尋樹(BST)
二叉搜尋樹 bst bst 或者是一棵空樹,或者對於任何乙個結點,設其值為k,則該結點的左子樹的值小於k,右結點的值大於k。二叉搜尋樹按照中根遍歷將各個結點列印,將得到按照大到小的順序排列。bsg示意圖 二叉搜尋樹的效率在於檢索,將演算法複雜度從2 k減少到log n 檢索方式 從根結點開始,如果等...
BST二叉搜尋樹
深入學習理解bst include using namespace std typedef struct bitnodebitnode,bitree 二叉樹的插入操作 void insert bitnode root,int x 因為當對空樹插入時,相當於改變了樹的根節點的指向,因此需要用到指標或引...