資料結構二叉樹

2021-08-30 21:48:47 字數 2991 閱讀 1138

二叉樹定義:二叉樹由結點的有限集合構成。

二叉樹的五種形態:

a:空二叉樹,b只有乙個根節點的二叉樹,cd只左子樹點或右子樹的樹,e有2個子樹的樹。

特殊的二叉樹:1)滿二叉樹,2)完全二叉樹 ,3)擴充二叉樹。

1)滿二叉樹。

一顆二叉樹的任何節點,或者是樹葉,或者恰好有2棵非空子樹。

完全二叉樹:

只有最下面的2層的節點度數可以小於2

最下面一層的結點都集中在該曾最左邊的若干位置上。

擴充二叉樹:

當二叉樹出現空的子樹時,就增加新的特殊的結點,空樹葉。擴充二叉樹是滿二叉樹。

二叉樹的性質。

二叉樹第i曾(根為0層)最多有2^i個結點。

高度為k的二叉樹,最多有2^k-1個結點。

二叉樹的資料型別抽象(採用鏈式結構)。

結點型別:

//樹的節點

public class binarytreenode>

}

樹的介面定義:

public inte***ce tree>
二叉樹的遍歷演算法。

1)遞迴法,2)非遞迴法。

這2中方法中又分為1)先根遍歷,2)中根根遍歷,3)後跟遍歷

先根遍歷,先訪問根結點,再依次訪問左右結點

中根遍歷,先訪問左結點,再訪問根結點,最後訪問右結點。

後根遍歷,先訪依次訪問左右子結點,最後訪問根結點。

1)遞迴法

1.1)先根遍歷

private void preorder(binarytreenodep)
1.2)中根遍歷

private void inorder(binarytreenodep)
1.3)後根遍歷

private void postorder(binarytreenodep)
每個結點進去後都遞迴呼叫,分成2個呼叫方向,乙個向左乙個像右。

測試:

/**

* a

* b c

* d e f

* h i j k

*/// 先根順序

// a b d c e h i f j k

// 中根順序

// d b a h e i c j f k

// 後跟順序

// d b h i e j k f c a

2)非遞迴遍歷,非遞迴遍歷需要結束棧。

2.1.1)非遞迴遍歷,先根遍歷

public void preorder() else 

//向右擴充套件

current = node.rightchild();}}

}

2.2)非遞迴,中根遍歷

public void inorder() else }}

2.3)非遞迴,後根遍歷

public void postorder()  

//到最左邊的葉子幾點後出棧

current = stack.pop();

while (current.gettag() == binarytreenode.right_flag)else

}//再次入棧,將入棧標記改為右邊

current.settag(binarytreenode.right_flag);

stack.push(current);

current = current.rightchild();}}

測試:

/**

* a

* b c

* d e f

* h i j k

*/// 先根順序

// a b d c e h i f j k

// 中根順序

// d b a h e i c j f k

// 後跟順序

// d b h i e j k f c a

3)二叉樹的廣度周遊

廣度周遊需要借助佇列實現(fifo)

public void levelorder()

if (current.rightchild() != null)}}

廣度周遊是按照二叉樹的層次從上到下從左到右的遍歷。

測試:

/**

* a

* b c

* d e f

* h i j k

*/// 廣度周遊

// a b c d e f h i j k

原始碼github位址

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

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.二叉樹的實現 有兩種實現方式,...