27.樹(上)

數據結構中我們常用的就是樹,表,圖。我們上幾節學的都屬於線性表是一對一的線性結構,然後這節我們要開始學習非線性結構樹。

在樹的學習中我們主要學習二叉樹,但是關於樹的一些基本概念我們還是都要知道的。

二叉樹中我們主要學習幾種常用的遍歷方式, 中 後序遍歷及層次遍歷

 

一.樹的基本概念

先來點官方套話

樹(Tree)是n(n≥0)個節點的有限集合T,它滿足兩個條件 :

有且僅有一個特定的稱爲根(Root)的節點;

其餘的節點可以分爲m(m≥0)個互不相交的有限集合T1、T2、……、Tm,其中每一個集合又是一棵樹,並稱爲其根的子樹

表示方法 :樹形表示法、目錄表示法。

說了一大堆,感覺還是沒看懂。那就把上面的話忽略直接看圖:

 

結點的度數:一個結點子樹的個數

終端結點,葉子結點:度數爲零的結點

分支結點:度數不爲零的節點

內部結點:除根結點外的分支節點

同樣還是看圖吧,更直接:

數的高度或深度:樹中節點層數最大值。

結點的關係

有序樹:樹中每個節點的各個子樹的排列爲左到右2,不能交換,及兄弟間是有序的。

森鈴:m棵互不相交的樹的集合稱爲森林。

根結點沒有前驅節點,葉結點沒有後繼結點

 

二.二叉樹

1.二叉樹基本概念

二叉樹:由一個根節點以及兩棵互不相交的分別稱爲左子樹和右子樹組成。

二叉樹嚴格區分左右。

 

滿二叉樹:

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

完全二叉樹

滿二叉樹一定是完全二叉樹,但是完全二叉樹不一定是滿二叉樹。

完全二叉樹不太好理解,但是經常出選擇題,我們按照下面規律來選就可以。

按照滿二叉樹的結構按層次編號,編號不能出現空檔,纔是完全二叉樹。

上面的這些都不是完全二叉樹,

 

 

2.二叉樹性質

  1. 二叉樹第i(i≥1)層上的節點最多爲2i-1個
  2. 深度爲k(k≥1)的二叉樹最多有2k-1個節點。
  3. 滿二叉樹 :深度爲k(k≥1)時有2k-1個節點的二叉樹。
  4. 完全二叉樹 :只有最下面兩層有度數小於2的節點,且最下面一層的葉節點集中在最左邊的若干位置上。具有n個節點的完全二叉樹的深度爲 (log2n)+1或log2(n+1)

 

 

3.二叉樹存儲結構

 

二叉樹的順序存儲:按照完全二叉樹的編號方法從上到下,從左到右,根節點爲1號節點進行編號。

當遇到不完全二叉樹,需要通過虛節點進行補充,也就導致順序存儲很浪費存儲空間。

順序存儲結構一般只用在完全二叉樹上。

所以作爲理解就好,主要還是用鏈式存儲結構

 

鏈式結構的定義也是比較好理解

typedef  int  data_t ;
typedef  struct  node_t;
{
    data_t data ;
    struct node_t *lchild ,*rchild ;
} bitree_t ;

 

三.二叉樹的遍歷

遍歷 :沿某條搜索路徑周遊二叉樹,對樹中的每一個節點訪問一次且僅訪問一次。

 

先序遍歷:先訪問樹根,再訪問左子樹,最後訪問右子樹

中序遍歷:先訪問左子樹,再訪問樹根,最後訪問右子樹

後序遍歷:先訪問左子樹,再訪問右子樹,最後訪問樹根

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章