演算法筆記 二叉樹1

2021-09-05 09:14:08 字數 2072 閱讀 7497

先看圖:

通過上面的圖,可以很直觀的理解以下概念:根節點,子節點,兄弟節點,葉子節點。

沒有父節點的節點叫做根節點,比如節點 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.鏈式儲存 每個節點有三個字段,其中乙個儲存資料,另外兩個是指向左右子節點的指標。我們只要拎住根節點,就可以通過左右子節點的指標,把整棵樹都串起來。這種儲存方式我...