這就要提到外部排序了。因為記憶體的空間不足,有時候不能將排序的全部內容都放在記憶體中完成,就像是新學期老師按身高排座位,教室內站不開就要到外面排隊。
但計算機還有一些附加條件,比如外面空間有限,所以排身高只能在室內進行,所以呢,人們就將外存中的資料分為幾組,在記憶體中排好了然後合併。
這個時候,選擇樹就登場了。圖中一共是八組已經排好了的,每一組取最小的元素,然後按照滿二叉樹的結構排出最小的,(這裡是第四組的6最小)所以第四組的15跟進,和剩下的7個數字接著比較。
如果不是空樹,那麼左子樹的值小於根節點小於右子樹,並且每乙個子樹都是二叉排序樹
又叫二叉查詢樹,因為查詢的效率要比線性查詢更高。
由於其性質,所以只需要將樹中序遍歷,就能得到乙個排好序的數列。
struct bst
查詢:思路很清晰,看一下就行
bst*
search
(int k, bst* f)
插入:
void insert
(int r , bst *f)
else
if( r.key < f-
>data )
insert ( r , f-
>lchild )
else
if( r.key >= f-
>data )
insert ( r , f-
>rchild )
}
要知道,插入後的結點都是在葉子節點上,因為不停的比較直到到了某乙個葉子節點才能確定是這個結點的哪邊孩子。
刪除:
void
如果度數不為2,直接把乙個孩子提上來就行了,葉子就直接為空;
但如果是2度結點,那麼就需要找乙個合適的結點代替了,下面就是deletemin函式求右孩子最左結點
(其實左孩子最右結點也行的)
int
deletemin
(bst* f)
else
return
deletemin
(f->lchild)
;}
和選擇樹差不多,就是用到了樹的結構:
八枚硬幣,有乙個是假的,比較三次確定哪個是假幣以及假幣和真幣相比質量如何?
特點:
樹與二叉樹的應用 二叉排序樹
1 二叉排序樹的定義 二叉排序樹 簡稱 bst 也稱為 二叉查詢樹 二叉查詢樹或者是一棵空樹,或者是一棵具有下列 特性的非空二叉樹 a.若左子樹非空,則左子樹上所有結點關鍵字值均小於根結點的關鍵字值 b.若右子樹非空,則右子樹上所有結點關鍵子值均大於根結點的關鍵字值 c.左 右子樹本身也分別是一棵二...
二叉樹,完全二叉樹,滿二叉樹,二叉排序樹
二叉樹 二叉樹是每個節點最多有兩個子樹的樹結構 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。完全二叉樹 除最後一層外,每一層上的結點數均達到最大值 在最後一層上只缺少右邊的若干結點 樹中所含的n個節點和滿二叉樹中編號...
二叉樹的應用 二叉排序樹的刪除
二叉排序樹有兩種刪除結點的思路 del1是非遞迴版,按照思路進行 del2是遞迴版 注意 del3為非遞迴 del4為遞迴 此方法由於可能改變root位置 即在刪除根節點的時候 需要格外注意root需要實際意義上的改變 即直接對root改變 上一種方法只改變了root值,實際並未改變結點位置,所以不...