樹輪基礎 二叉樹

2021-10-06 21:25:08 字數 2245 閱讀 7644

樹的定義:

樹是資料結構和演算法分析與設計中的一種非常重要的結構,由n個結點組成的具有層次結構的模型。

其主要有以下幾個特點:

1、有乙個根結點,一般稱為root結點

2、每乙個元素都被稱為node

3、除了root結點外,其餘的結點都會被分為n個互不相交的集合(子樹)

樹形結構的基本術語:

結點:樹形結構裡面的元素

子樹:當結點大於1時,其餘的結點分為互不相交的集合稱為子樹

度:乙個結點擁有的子樹數量稱為結點的度

葉子:度為0的結點

孩子:結點的子樹的根稱為孩子結點

雙親:和孩子結點對應

兄弟:同乙個雙親結點

深度:結點的最大層次稱為樹的深度,計算時間複雜度用

森林:由n個互不相交的樹稱為森林

二叉樹(binarytree):

一種特殊的樹形結構,每個結點最多只有兩個子樹。

在二叉樹的第n層上,最多有2^(n-1)個結點,

如:第2層最多有2個結點,第3層最多有4個結點。

滿二叉樹:

假設樹的深度為m,則有2^m-1個結點的二叉樹。

如:樹的深度為3,滿二叉樹的結點數為2^3-1=7

二叉樹的三種遍歷(重點):

前序遍歷:根結點 -> 左子樹 -> 右子樹

中序遍歷:左子樹 -> 根結點 -> 右子樹

後序遍歷:左子樹 -> 右子樹 -> 根結點

遍歷都是從根結點開始,遇根結點輸出。

我們以中序遍歷為例子:

首先找到a,a有左子樹,找到b。

把b當做子樹,找b的左子樹,沒有返回b,輸出b。

然後找b的右子樹,找到c。

把c當做子樹,找c的左子樹,找到d。

d沒有子樹,所以輸出d。

此時c的左子樹結束,返回c,輸出c。

此時a的左子樹全部結束,返回a,輸出a。

接下來開始遍歷a的右子樹。

跟上面步驟一樣,不做贅述。

所以中序遍歷得出:

b -> d -> c -> a -> e -> h -> g -> k -> f

因此三種遍歷方式得出的結果是:

前序遍歷:abcdefghk

中序遍歷:bdcaehgkf

後序遍歷:dcbhkgfea

我們來看看**如何實現:

package com.monkey.springdemo.utils.sort;

class node

public string getdata()

public void setdata(string data)

public node getleftnode()

public void setleftnode(node leftnode)

public node getrightnode()

public void setrightnode(node rightnode)

}public class binarytree

public void print(node node)

//前序遍歷:根(輸出)-> 左 -> 右

public void pre(node root)

//遍歷右子樹

if (root.getrightnode() != null)

}//中序遍歷: 左 -> 根(輸出)-> 右

public void in(node root)

//遍歷根結點

print(root);

//遍歷右子樹

if (root.getrightnode() != null)

}//後序遍歷: 左 -> 右 -> 根(輸出)

public void post(node root)

//遍歷右子樹

if (root.getrightnode() != null)

//遍歷根結點

print(root);}}

前、中、後的遍歷方式,

主要區別在於結點與子樹的遍歷順序。

大家搞懂了這個順序,自然而然就理解了遍歷方式。

二叉樹基礎

二叉樹 二叉樹是一棵特殊的樹,二叉樹每個節點最多有兩個孩子結點,分別稱為左孩子和右孩子。二叉樹節點結構 二叉樹的建立 node createtree const t a,size t size,size t index,const t invilid return root 返回根節點 前序遍歷 前...

二叉樹基礎

最近學習的一些筆記,記錄一下 樹是一種非線性結構,樹 這種資料結構真的很像我們現實生活中的 樹 這裡面每個元素我們叫 節點 例如下面這幅圖,a 節點就是 b 節點的父節點,b 節點是 a 節點的子節點。b c d 這三個節點的父節點是同乙個節點,所以它們之間互稱為兄弟節點。我們把沒有父節點的節點叫作...

二叉樹基礎

1.二叉樹的定義 每個結點最多只有兩棵子樹 子樹左右有順序之分 2.常見的二叉樹型別 滿二叉樹 看起來 完美 而又 平衡 的樹 完全二叉樹 首先從上至下,從左至右按順序給結點編號,再從下至上,從右至左按順序刪除結點。由此可見滿二叉樹是一棵特殊的完全二叉樹,而完全二叉樹是 缺胳膊少腿 的滿二叉樹。3....