二叉樹是一種樹狀結構的圖。它由一系列節點和邊組成。
每個節點的位元組點數不超過2個,只有乙個根結點。
基礎名詞解釋
度: 每個節點的字節點的個數。如圖:每個節點的度都是2。如果某個節點有乙個字節點,那麼它的度是1。
根節點: 一棵樹最上面的節點;一棵樹只有乙個根節點。
葉子節點: 沒有字節點的節點。圖中最下面的8個節點都是葉子節點。
高度: 樹的層數。圖中樹的高度是3。
深度: 節點所處的深度;葉子節點的深度等於樹的高度;根結點是深度0, 依次類推,字節點是深度1...
內部節點: 除了葉子節點以外的節點。圖中除了最下面的8個葉子節點之外的7個節點都是內部節點。包含根結點。
樹的分類
滿二叉樹: 滿二叉樹要求高度為h的二叉樹總節點數為2**(n+1)-1的。上面的示意圖是個滿二叉樹。
完全二叉樹: 完全二叉樹只要求從1-n的節點排布同滿二叉樹。
二叉查詢樹: 對於所有的節點來說,當前節點的左子樹的所有節點的值比當前節點的值要小;
所有右子樹的值比當前節點的值要大。下圖是個查詢二叉樹。
二叉查詢樹遍歷方式
中序遍歷: 即按照資料公升序遍歷。按照左子節點,父結點,右子節點的順序遍歷。
然後對於根節點來說,左右子節點本身又是個二叉查詢樹,需要遞迴呼叫,直到葉子節點為止。
葉子節點相當於左右子節點都是null的節點。
先序遍歷:按照根結點,左子樹,右子樹的順序遍歷。
後序遍歷:按照左子樹,右子樹,根結點的順序遍歷。
使用**實現如下:
執行結果如下:
//執行結果如下:
inorder-->[10, 20, 25, 28, 30, 35, 45, 56, 68, 78, 80, 88, 89]
preorder-->[56, 28, 20, 10, 25, 35, 30, 45, 78, 68, 88, 80, 89]
postorder-->[10, 25, 20, 30, 45, 35, 28, 68, 80, 89, 88, 78, 56]
二叉樹的遍歷和線索二叉樹
二叉樹的遍歷,所謂二叉樹的遍歷,是指按某條搜尋路徑訪問樹中的每個結點,使得每個結點均被訪問一次,而且僅被訪問一次。由二叉樹的遞迴定義可知,遍歷一棵二叉樹便要決定對根結點n,左子樹l和右子樹r的訪問順序。按照先遍歷再遍歷右子樹的原則,常見的遍歷次序有先,中,後三種遍歷方法,其中序指的是根結點再何時被訪...
二叉樹的遍歷和線索二叉樹
1 遍歷二叉樹 以一定的規則將二叉樹的結點排列成乙個線性序列。2 線索二叉樹 實質就是遍歷一次二叉樹,從而充分利用傳統二叉鍊錶中的空指標,不浪費儲存空間。目的在於利用線索二叉樹可以加快查詢結點的前驅和後繼的速度。3 先序和中序 後序和中序 層序和中序 可以確定唯 一 一 顆二叉樹。只知道先序和後序,...
二叉樹的遍歷和線索二叉樹
void preorder bitree t void inorder bitree t void postorder bitree t void preordertr erse bitree t else void inordertr erse bitree t else 後序非遞迴遍歷二叉樹的順...