資料結構與演算法 樹與二叉樹

2021-10-06 09:17:38 字數 3530 閱讀 4335

樹是若干個結點組成的有限集合,其中必須有乙個結點是根結點,其餘結點劃分為若干個互不相交的集合,每乙個集合還是一棵樹,稱為根的子樹。當樹的結點個數為0時,我們稱這棵樹為空樹,記為φ。

關於樹的基本術語;

結點:表示樹中的元素,包括資料項和若干指向其子樹的分支;

結點的度:結點所擁有的子樹的個數;

葉子結點:度為0的結點叫做葉子結點,或者叫做終端結點;

分支結點:度不為0的結點,又叫做非終端結點;

孩子,兄弟,父親(父節點);

路徑,路徑長度;

祖先,子孫;

結點的層數:規定根結點的層數為1,其餘結點的層數=父節點層數+1;

樹的深度:樹中所有結點的最大層數;

樹的度:樹中各結點度的最大值叫做樹的度;

森林:零顆或有限顆不相交的樹的集合叫做森林;任何一棵樹。刪去根結點就變成了森林。

二叉樹(binary tree)是一種每個結點最多擁有2個子樹的樹結構,其中第1個子樹被稱為左子樹,第2個子樹被稱為右子樹。

滿二叉樹

在一棵二叉樹中,如果所有分支結點都存在左子樹和右子樹,並且所有葉子結點都在同一層上,這樣的一棵二叉樹稱作滿二叉樹。

完全二叉樹

完全二叉樹是一種葉子結點只能出現在最下層和次下層且最下層的葉子結點集中在樹的左邊的特殊二叉樹。

(1、完全二叉樹中如果有度為1的結點,只可能有乙個,且該結點只有左孩子。

2、深度為k的完全二叉樹在k-1層上一定是滿二叉樹。)

二叉樹的性質

性質1:一棵非空在二叉樹的第 i 層上至多有 2i -1個結點(i  1)。

性質2:一棵深度為k的二叉樹中,最多具有2k-1個結點。

性質3:對於一棵非空的二叉樹,如果葉子結點數為n0,度數為2的結點數為n2,則有: n0=n2+1。

性質4:具有n個結點的完全二叉樹的深度k為 ⌊ log2n ⌋+1。

性質5:對於具有n個結點的完全二叉樹,如果按照從上至下和從左到右的順序對二叉樹中的所有結點從1開始順序編號,則對於任意的序號為i的結點,有:

(1)如果i>1,則序號為i的結點的父結點的序號為 ⌊i/2⌋;如果i=1,則該結點是根結點,無父結點。

(2)如果2i≤n,則序號為i的結點的左子結點的序號為2i;如果2i>n,則序號為i的結點無左子結點。

(3)如果2i+1≤n,則序號為i的結點的右子結點的序號為2i+1;如果2i+1>n,則序號為i的結點無右子結點。

二叉樹的儲存結構

1.順序儲存結構

用一組連續的儲存單元存放二叉樹中的結點。一般是按照二叉樹結點從上至下、從左到右的順序儲存。

2.鏈式儲存結構

1)二叉鍊錶儲存

結點的儲存結構為:

二叉樹鏈式儲存的每個結點可描述為:

class

node

public

node

(t x)

}

二叉鍊錶的關鍵是確定二叉樹的根,**如下:

class

binarytree

public

binarytree

(t x)

//……

}

二叉樹的基本操作與實現建立一棵空二叉樹

public

binarytree()

生成一棵二叉樹

public

binarytree

(t x)

二叉樹中插入乙個左孩子結點

public

boolean

insertleft

(t x, node

parent)

return

true

;}

刪除二叉樹的左子樹

public

boolean

deleteleft

(node

parent)

}

按照某種順序訪問二叉樹中的每個結點,使每個結點被訪問一次且僅被訪問一次。

先序遍歷(dlr)二叉樹的操作定義:

若二叉樹為空,則空操作;否則

(1) 訪問根結點;

(2) 先序遍歷左子樹;

(3) 先序遍歷右子樹。

}2.中序遍歷(ldr)二叉樹的操作定義:

若二叉樹為空,則空操作;否則

(1) 中序遍歷左子樹;

(2) 訪問根結點;

(3) 中序遍歷右子樹。

}3.後序遍歷(lrd)二叉樹的操作定義:

若二叉樹為空,則空操作;否則

(1) 後序遍歷左子樹;

(2) 後序遍歷右子樹;

(3) 訪問根結點。

演算法與資料結構 二叉樹

二叉樹 binary tree 二分樹 二元樹 二叉樹的遞迴定義 或是空樹,或是一棵由乙個根結點和左右子樹組成的樹,且左右子樹也是二叉樹。分枝結點 除葉結點以外的結點。二叉樹的性質 最多 2 h 1 個結點 n2 n0 1 滿二叉樹 所有分枝結點都存在左右子樹,且葉結點都在同一層。完全二叉樹 除最後...

資料結構與演算法 二叉樹

1.普通二叉樹 treenode package math public class treenode public void setdata int data public treenode getlchild public void setlchild treenode lchild publi...

資料結構與演算法 二叉樹

二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 性質1 在二叉樹的第i層上至多有2 i 1 個結點 i 0 性質2 深度為k的二叉樹至多有2 k 1個結點 k 0 性質3 對於任意一棵二叉樹,如果其葉結點數為n0,而度...