樹
先看圖:
通過上面的圖,可以很直觀的理解以下概念:根節點,子節點,兄弟節點,葉子節點。
沒有父節點的節點叫做根節點,比如節點 23。擁有相同的父節點的節點,稱之為兄弟節點,比如節點 13 和節點 54。沒有子節點的節點叫做葉子節點,比如節點 10,節點 28 等。
層級:如圖所示,從 1 層開始,自上而下依次排序。
深度:從 0 開始,自上而下依次排序。節點的層級減一就是該節點的深度。
高度:從 0 開始,自下而上依次排序。高度與深度排序正好相反。
二叉樹樹中的每個節點最多只能有兩個子節點,分別是左子節點和右子節點。
滿二叉樹:葉子節點全在最底層,除了葉子節點以外,其他節點分別都有左子節點和右子節點。
滿二叉樹圖例如下:
完全二叉樹:葉子節點在最底下兩層,最後一層的葉子節點靠左排列,除了最後一次,其他層的節點個數要達到最大數。
完全二叉樹圖例如下:
表示二叉樹
鏈式儲存法:每個節點包含三個記憶體域,乙個用來儲存資料,乙個是左指標,指向左子節點的記憶體位址,乙個是右指標,指向右子節點的記憶體位址。
如下圖例:
順序儲存法:基於陣列實現的儲存法。根節點儲存在陣列下標 i = 1 的位置,它的左子節點對應的陣列下標就是 i * 2 = 2, 右子節點對應的陣列下標就是 i * 2 + 1 = 3。依次類推,任意乙個節點的左子節點對應的陣列下標都是 i * 2,右子節點對應的陣列下標都是 i * 2 + 1。
如下圖例:
二叉樹的遍歷
插圖:
前序遍歷:對於任意乙個節點,先列印自身,然後列印左子節點,最後列印右子節點。
**示例如下:
//前序遍歷
public
static
void
preorder
(treenode tree)
treenode rightnode = tree.rightnode;
if(rightnode != null)
}
中序遍歷:對於任意乙個節點,先列印左子節點,然後列印自身,最後列印右子節點。
**示例如下:
//中序遍歷
public
static
void
middleorder
(treenode tree)
system.out.
println
(tree.data)
; treenode rightnode = tree.rightnode;
if(rightnode != null)
}
後序遍歷:對於任意乙個節點,先列印左子節點,然後列印右子節點,最後列印自身。
**示例如下:
//中序遍歷
public
static
void
postorder
(treenode tree)
treenode rightnode = tree.rightnode;
if(rightnode != null)
system.out.
println
(tree.data)
;}
總結
初入演算法學習,必是步履蹣跚,一路磕磕絆絆跌跌撞撞。看不懂別慌,也別忙著總結,先讀五遍文章先,無他,唯手熟爾~
與諸君共勉
演算法筆記 二叉樹,二叉搜尋樹筆記(python)
二叉樹筆記 1.基本概念 1 根節點 2 葉節點 2.樹 圖 鍊錶之間的關係 1 鍊錶是特殊化的樹,例如一棵樹只有左子節點,而沒有右子節點 或者一棵樹只有右子節點,而沒有左子節點。如下圖。3.二叉樹,python定義 class treenode def init self,val self.val...
二叉樹學習筆記1
基本概念 1.根節點 根節點是乙個沒有雙親結點的結點,一課樹最多只能有乙個根節點 2.結點 樹上面的所有資料都是結點,但結點不只包括資料,還包含指向子樹的分支 位址 3.結點的度 結點擁有子樹或分支的個數 4.樹的度 樹中各結點的最大值 5.結點的層數 根結點的層數為0,其他結點的層數等於其父結點的...
演算法筆記 二叉樹基礎
如何表示 或者儲存 一棵二叉樹?想要儲存一棵二叉樹,我們有兩種方法,一種是基於指標或者引用的二叉鏈式儲存法,一種是基於陣列的順序儲存法。1.鏈式儲存 每個節點有三個字段,其中乙個儲存資料,另外兩個是指向左右子節點的指標。我們只要拎住根節點,就可以通過左右子節點的指標,把整棵樹都串起來。這種儲存方式我...