資料結構 五 二叉樹 堆

2021-09-23 07:39:32 字數 1754 閱讀 4688

實現乙個二叉查詢樹,並且支援插入、刪除、查詢操作

//實現乙個二叉查詢樹,並且支援插入、刪除、查詢操作

typedef

char datatype

typedef

struct bnode

btnode,

*btptr;

createlbtree

(btptr bt)

//建立以bt為根節點指標的二叉鍊錶結構

i++;//節點序號計數

enqueue

(q, p)

;//新節點位址或虛節點位址(null)進隊

if(i ==

1) bt = p;

//第一輸入節點為根

else

ch =

getchar()

;//輸入下一資料

}return

(bt)

;}

實現查詢二叉查詢樹中某個節點的後繼、前驅節點

//實現查詢二叉查詢樹中某個節點的後繼、前驅節點

//線索二叉樹

typedef

struct bnode

btnode,

*btptr;

btptr pre =

null

;void

inthreadbt

(btptr bt)

//對二叉樹bt的線索華的演算法

if(bt -> rchild ==

null

)//右指標空閒時

bt -> rtag =1;

//記錄下此點有空閒指標

if(pre && pre->rtag ==1)

//上乙個節點有空的後繼指標時,

pre -> rchild = bt;

//該指標指向其後繼(本節點)

pre = bt;

//次節點已訪問,更新為前驅

inthreadbt

(bt -> rchild)

;//線索化右子樹 }}

btptr inpre

(btptr p)

//求中序線索二叉樹中p節點前驅的演算法

btptr insucc

(btptr p)

//求中序線索二叉樹中p節點後繼的演算法

實現二叉樹前、中、後序以及按層遍歷

//實現二叉樹前、中、後序以及按層遍歷 

void

preorder

(btptr t)

//對當前根節點指標為t的二叉樹按前序遍歷的演算法

}void

inorder

(btptr t)

//對當前根節點指標為t的二叉樹按中序遍歷的演算法

}void

postorder

(btptr t)

//對當前根節點指標為t的二叉樹按後序遍歷的演算法

}void

layerorder

(btptr t)

//對二叉樹按層次遍歷的演算法

}}

實現乙個小頂堆、大頂堆、優先順序佇列

實現堆排序

void

heapsort

(sqfile f)

//對順檔案f的堆排序演算法

}

利用優先順序佇列合併 k 個有序陣列

求一組動態資料集合的最大 top k

資料結構 五 二叉樹(Binary Tree)

二叉樹 binary tree 是n n 0 個結點的有限集合,該集合或者空集 空二叉樹 或由乙個結點和兩棵互不相交的 分別稱為根結點的左子樹和右子樹的二叉樹組成。圖5.1 1 每個結點最多兩棵樹,所以二叉樹的結點的度最大為2 2 左子樹和右子樹是有序的 3 即使樹中某結點只有一棵樹,也要區分它是左...

大話資料結構 (五)二叉樹的來由

在這次學習之前,在學校課程內也學過資料結構這門課,當時也只是臨時抱佛腳應付考試。提到樹,我的第一映像是,它得先建立乙個結點,結點的內容包括該結點的值和兩個結點指標。現在想起來還真有點此處省略一萬字 下面正式進入主題,既然線性結構裡面分為順序儲存結構和鏈式儲存結構,那麼樹的儲存結構會不會也是類似的呢。...

資料結構學習筆記五 二叉查詢樹

二叉查詢樹 binary search tree 又被稱為二叉搜尋樹。它是特殊的二叉樹 對於二叉樹,假設x為二叉樹中的任意乙個結點,x節點包含關鍵字key,節點x的key值記為key x 如果y是x的左子樹中的乙個結點,則key y key x 如果y是x的右子樹的乙個結點,則key y key x...