資料結構學習之 二叉樹的定義和儲存實現

2021-08-02 20:15:20 字數 1418 閱讀 1116

最近在中國大學mooc上學習了資料結構課程,這周溫習了二叉樹相關的知識,現在將和二叉樹相關的定義、抽象資料結構、性質以及c++實現基本的操作進行總結。

一、二叉樹的抽象資料型別描述

任何一種抽象資料型別的描述分為資料物件集操作集兩部分。

1、資料物件集:一種特殊的樹,即是有窮的節點集合,非空時,由根節點和左右二叉子樹組成,每個節點的度最大為2。

2、操作集: (1)判別二叉樹樹是否為空;(2)二叉樹的遍歷; (3)建立乙個空的二叉樹

3、特別性質: (1)二叉樹本質上是種特殊的樹,樹中每個節點最多有2個子節點,子樹有左右順序之分,一般的樹子樹沒有順序。

(2)二叉樹的四種遍歷方法: 先序遍歷--根、左、右;中序遍歷--左、根、右;後序遍歷--左、右、根;層次遍歷--從上到小,從左到右,一層層進行遍歷。

二、幾種特殊結構的二叉樹

1、斜二叉樹:二叉樹的子樹都在一邊,呈乙個嚴重傾斜的狀態。

2、完美(滿)二叉樹:樹的每一層都是滿節點的,即:第i層節點必是2^(i-1),根節點在第一層。

3、完全二叉樹:只有最後一層的節點可以是非滿的,最後一層的節點必須是從左往右放的,具體定義和示意圖如下:

比如該圖中,jk節點要是分別是d的右節點和e的左節點,該樹就是完全二叉樹。

三、二叉樹的儲存結構

1、順序儲存結構:適合儲存完全二叉樹和完美二叉樹,按照從上到下,從左到右的順序儲存n個節點的值,用陣列實現即可。

對於一般的二叉樹

也可以採取這種方式,把相應的沒有子節點的節點補齊成完全二叉樹既可,但是當二叉樹很稀疏,比如是斜二叉

樹的時候就會造成很

大的空間浪費。

優勢:操作簡單,元素索引也很簡單。劣勢:僅適合儲存完美和完全二叉樹。

2、鏈式儲存結構:用鍊錶的形式儲存二叉樹,每個節點結構體都有乙個指向左子節點和右子節點的節點結構體指標。

優勢:任何形式的二叉樹都方便儲存;劣勢:元素索引較難,涉及到指標和記憶體操作,不方便。

資料結構學習之二叉樹

一 為什麼用二叉樹,而不是三個指標域或是根據實際情況指定指標域?比如3,那麼有n個節點就是有3n個指標域,其中邊只有n條,那麼只有n 1個域非空,有2n 1個域為空,浪費空間。而對於2,那麼就只有n 1個域為空。而比如說根據實際來確定指標域,對於實現上是非常困難的。度為2的樹就是二叉樹。斜二叉樹 完...

資料結構學習筆記之二叉樹 BST

bst是二叉樹的一種,其中每個結點的左孩子小於該結點的值,右孩子大於於該結點的值,對該樹進行中序遍歷可以得到一組有序序列 二叉搜尋樹 include typedef struct node node typedef struct tree tree void insert tree tree,int...

資料結構學習(1) 二叉樹

二叉樹結構 public class treenode 前序遍歷 根結點,左子樹,右子樹 public static void prenode treenode node,listtreelist 中序遍歷 左子樹,根結點,右子樹 public static void midnode treenod...