文章目錄
(一)樹形結構
(二)樹(Tree)的概念01
(三)樹(Tree)的概念02
(四)樹(Tree)的概念03
(五)二叉樹(Binary Tree)的概念
(六)二叉樹(Binary Tree)的性質
(七)真二叉樹(Proper Binary Tree)的介紹
(八)滿二叉樹(Full Binary Tree)的介紹
(九)完全二叉樹(Complete Binary Tree)的概念
(十)完全二叉樹(Complete Binary Tree)的性質01
(十一)完全二叉樹(Complete Binary Tree)的性質02
(十二)完全二叉樹(Complete Binary Tree)的面試題
(十三)國外教材的說法
(一)樹形結構
數據結構中的樹就像是一顆倒掛的樹,如下:
生活中很多地方都用到樹形結構的概念,如下:
(二)樹(Tree)的概念01
說明:
- 下面紅色圈圈圈出來的5棵樹,都是權值爲1的節點(以下都簡稱x號節點)的子樹
- 下面紅色圈圈圈出來的分別是3號節點的左子樹和右子樹
又比如:51號節點和52號節點分別是5號節點的左子樹和右子樹
左右子樹都是相對而言的
- 節點的度是子樹的個數,比如:1號節點的度是5,2號節點的度是2
- 樹的度是所有節點中的最大值,該樹的度是5
- 葉子節點是度爲0的節點,比如:21、31、51、52、61等等
(三)樹(Tree)的概念02
說明:
- 節點的深度是指從根節點到當前節點的唯一路徑上的節點總數,比如31號節點的深度就是3
- 節點的高度是指從當前節點到最遠葉子節點路徑上的節點總數,比如說2號節點的高度不是1(21號子節點不是最遠的),而是3(221、222和223都行)
- 樹的深度是指所有節點深度中的最大值,該樹的深度是4
- 樹的高度是指所有節點高度中的最大值,該樹的高度是4
注意:數據結構的樹是一顆倒掛的樹,我們只需要在把它倒過來,就可以理解深度和高度了 - 一般來說,樹的深度等於樹的高度
(四)樹(Tree)的概念03
說明:有序樹是指任意子節點之間是有順序關係的,比如從左到右遞增
(五)二叉樹(Binary Tree)的概念
說明:
- 即使某節點只有一顆子樹,也要區分左右子樹,比如96號節點是87號節點的右子樹
- 只有一個節點的二叉樹,那個節點即使根節點,也是葉子節點,如11號節點
(六)二叉樹(Binary Tree)的性質
說明:
- 二叉樹的葉子節點的度爲0,所以 總節點數=度爲0的節點數+度爲1的節點數+度爲2的節點數
- 二叉樹的邊數如下:
- 二叉樹的邊數等於度,所以 T=n1+2*n2
- 每一個節點的頭上都有一條邊,唯獨根節點的頭上沒有邊,所以 T=n-1
(七)真二叉樹(Proper Binary Tree)的介紹
(八)滿二叉樹(Full Binary Tree)的介紹
說明:
- 在同樣高度的二叉樹中,滿二叉樹的葉子節點數量最多、總節點數量最多
比如下面這顆同高度的二叉樹,就像缺斤少兩一樣
- 滿二叉樹一定是真二叉樹,真二叉樹不一定是滿二叉樹
(九)完全二叉樹(Complete Binary Tree)的概念
說明:
- 完全二叉樹從根結點至倒數第 2 層是一棵滿二叉樹
- 滿二叉樹一定是完全二叉樹,完全二叉樹不一定是滿二叉樹
- 排列的規則如下:
- 下面這顆二叉樹不是完全二叉樹
(十)完全二叉樹(Complete Binary Tree)的性質01
注意:因爲h肯定是整數,假設log2n取4.2,由 h-1 <= log2n < h
得 h=5
注意:java的int自帶floor功能,比如 int a = 5/2;
,a=2
(十一)完全二叉樹(Complete Binary Tree)的性質02
- 從1開始編號的情況
- 從0開始編號的情況
(十二)完全二叉樹(Complete Binary Tree)的面試題
分析如下:
最終的數學公式:n0 = floor(n/2 + 1/2)
或n0 = floor((n+1)/2)
實際編程的公式:n0 = (n+1) >> 1
(int自帶floor功能)
其實向下取整(floor)和向上取整(ceiling)是可以互相轉換的