資料結構 二叉樹

2021-09-11 22:32:00 字數 2668 閱讀 1753

樹是n個結點的有限集合,在乙個非空的樹中有且只有乙個根結點,其餘結點可分為m個互不相交的有限子集,其中每個子集又是一棵樹,並且成為根節點的子樹。

文字定義有點繞,但圖形化很容易記住:

|----------a----------|

| | |

|---b---| c |---d---|

| | | | |

e f g h i

樹的基本概念主要有以下幾種:

結點的子樹稱為結點的孩子;相應地,該結點稱為其子結點的雙親;具有相同雙親的結點互為兄弟結點;上圖中,bcd是a的孩子,a是bcd的雙親,同時bcd互為兄弟結點

結點的度是指結點孩子結點的個數,a有3個孩子所以度為3,其他結點也以此類推

度為0的結點稱為葉子結點,也稱為終端結點,上圖中cefghi為葉子結點

度不為0的結點稱為內部結點,也稱為中間結點,上圖中bd為中間結點

根為第一層結點,根的孩子為第二層結點,結點的層次即為目標節點與根結點構成的路徑中結點的個數

樹中所有結點的最大層次即為樹的高度,上圖中樹的高度為3

樹中每個結點的孩子結點順序不可交換為有序樹,反之稱為無序樹

二叉樹的定義:「所有結點的孩子數不超過2的有序樹」。

所有非葉子結點的孩子數均為2的二叉樹即為滿二叉樹,若其深度為k則樹的結點數為2k - 1

高度為h的二叉樹,除第h層外的每一層結點數均是滿的,且h層的結點不存在左兄弟結點為空的情況,符合上述條件的二叉樹被稱為完全二叉樹

在結點中記錄了某種遍歷方式對應的結點線性順序關係的二叉樹

最優二叉樹也稱為哈夫曼樹,它是一類帶權路徑長度最短的樹,樹的帶權路徑長度等於所有葉子結點的帶權路徑長度只和,帶權路徑長度等於權重乘以路徑長度,經典應用-霍夫曼編碼

二叉樹的遍歷,是指按某種策略訪問樹中的每個結點,主要有四種方式:先序、中序、後序與按層。為了後文描述遍歷演算法,先對樹結點做乙個結構定義:

// tree node

先序遍歷是指先訪問根結點,繼而先序遍歷左子樹再先序遍歷右子樹,演算法**如下:

function preorder(root) 

console.log(root.data);

preorder(root.left);

preorder(root.right);

}

中序遍歷是指先中序訪問左子樹,繼而訪問根結點再中序遍歷右子樹,演算法**如下:

function inorder(root) 

inorder(root.left);

console.log(root.data);

inorder(root.right);

}

非遞迴方式:

function inorderwithstack(root) 

q = stack.pop(); // 結點出棧

console.log(q.data);

p = q.right;

}}

後序遍歷是指先後序訪問左子樹,繼而後序訪問右子樹再訪問根結點,演算法**如下:

function postorder(root) 

postorder(root.left);

postorder(root.right);

console.log(root.data);

}

按層遍歷是指根據樹的層從小到大,每一層從左向右訪問各結點,刷法**如下:

function levelorder(root) 

}

查詢二叉樹也稱為二叉排序書,它滿足以下兩個條件:

查詢二叉樹主要作用就是可以進行快速查詢,從某查詢二叉樹中查詢值的演算法如下:

function searchbst(root, key) 

return p;

}

查詢二叉樹的插入演算法與查詢演算法相似,如下:

function insertbst(root, key) 

if (p !== null)

if (q.data > key)

else

}

平衡樹滿足以下兩個條件:

一顆平衡查詢二叉樹的查詢效率會優於不平衡的查詢二叉樹,但是插入和刪除結點可能涉及需要對樹做調整使其保持平衡,這其中的操作用**表示會比較複雜,暫時不展開。

b樹是乙個一般化的二叉查詢樹,主要用在資料庫和檔案系統上,相信內容移步wiki。

部落格原文

資料結構 二叉樹 反轉二叉樹

include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...

《資料結構》 二叉樹

二叉樹 是 n個結點的有限集,它或為空集,或由乙個根結點及兩棵互不相交的 分別稱為該根的左子樹和右子樹的二叉樹組成。二叉樹不是樹的特殊情況,這是兩種不同的資料結構 它與無序樹和度為 2的有序樹不同。二叉樹的性質 1 二叉樹第 i層上的結點數最多為 2 i 1 2 深度為 k的二叉樹至多有 2 k 1...

資料結構 二叉樹

1.二叉樹 二叉樹是一種特殊結構的樹,每個節點中最多有兩個子節點,如圖1所示 圖1 二叉樹 在圖1中的二叉樹裡,a c有兩個子節點,b d有乙個子節點。對於二叉樹還有圖2中的以下情況 圖2 二叉樹的特殊情況 在博文中還介紹了滿二叉樹和完全二叉樹還有其他的特殊二叉樹。2.二叉樹的實現 有兩種實現方式,...