樹
說明:如果在看部落格過程中有對深度,高度和層次有迷惑的,請不要著急,這是因為不同的基數問題。到底是從0開始還是從1開始算,先忽略這個問題,部落格下面轉載的有詳細說明。
樹的概念(理解即可):
樹是由結點或頂點和邊組成的(可能是非線性的)且不存在著任何環的一種資料結構。沒有結點的樹稱為空(null或empty)樹。一棵非空的樹包括一個根結點,還(很可能)有多個附加結點,所有結點構成一個多級分層結構。
樹的基本知識:
- 節點深度:對任意節點x,x節點的深度表示為根節點到x節點的路徑長度。所以根節點深度為0,第二層節點深度為1,以此類推。如圖1節點5的深度為0,節點2的深度為1,節點1的深度為2。(深度從上往下看)
- 節點高度:對任意節點x,葉子節點到x節點的路徑長度就是節點x的高度。圖1中節點1,3,7的高度為0,節點2,8高度為1,節點5高度為2.(高度從下往上看)
- 樹的深度:一棵樹中節點的最大深度就是樹的深度,也稱為高度。圖1的深度為2
- 父節點:若一個節點含有子節點,則這個節點稱為其子節點的父節點.如圖1節點5是節點2,8的父節點
- 子節點:一個節點含有的子樹的根節點稱為該節點的子節點。如圖1節點2,8是節點5的子節點。
- 節點的層次:從根節點開始,根節點為第0層,根的子節點為第1層,以此類推
- 兄弟節點:擁有共同父節點的節點互稱為兄弟節點。如圖1節點2和8是兄弟節點。
- 度:節點的子樹數目就是節點的度。如圖1中節點5,2的度為2,節點8的度為1,節點1,3,7的度為0
- 葉子節點:度為零的節點就是葉子節點.如1圖中節點1,3,7
- 分支結點:度大於0的結點為分支結點,顯然除了葉子結點之外的結點都為分支結點。如圖1中節點5,2,8
- 祖先節點:對任意節點x,從根節點到節點x的所有節點都是x的祖先
- 後代:對任意節點x,從節點x到葉子節點的所有節點都是x的後代
- 森林:m顆互不相交的樹構成的集合就是森林
以下內容轉自 https://blog.csdn.net/weixin_41133154/article/details/80027285
https://blog.csdn.net/weixin_41133154/article/details/80027285 轉載內容開始
樹的基本術語最全面最易懂解釋start
樹的定義:
①如果樹的結點個數為0,則樹為空樹
②如果樹的結點個數為1,則該結點是被稱為根結點的結點
③如果樹的結點個數大於1,則必存在一個稱為根的結點,它的分支下是幾個互不相交的有限集合,並且這些互不相交的有限集合本身又是一棵樹。
定義註釋:從定義③可知,樹的定義蠻有趣的,樹中有樹,樹中還是樹,所以可知樹的定義是一個遞迴定義,從下圖可以看出,如果你仔細分析過帶簡單迴圈體的遞迴程式,那麼會知道程式的整個執行路徑其實就是一棵樹,所以樹和遞迴還是有不淺的聯絡的。
(1)結點(node)
樹的結點由資料元素及其若干分支組成,如下圖所示:
(2)樹和子樹(subtree)
以根結點為根的樹為全樹(或樹),以其他結點作為根結點的樹為子數
所以當談到以哪個結點為根結點,就應該知道指的是哪棵子數,以一個結點作為根結點的子數是唯一的。
(3)結點的度(degree of node)
結點的度指的是結點分支的個數,如下圖所示:
(4)樹的度
選取所有結點中最大的度,就是樹的度,如下圖所示:
(5)葉子結點(leaf node)
度為0的結點就是葉子結點,它位於樹最深層,並且樹只要非空,就一定存在葉子結點,如下圖所示:
(6)分支結點(internal node)
度大於0的結點為分支結點,顯然除了葉子結點之外的結點都為分支結點。
而且根結點也是分支結點。
(7)父節點(father node)和子結點(child node)
一個結點若干分支下的結點都為該結點的子結點(或稱孩子(children)),並且,該結點稱為子結點的父節點,如下:
(8)兄弟結點(brother)和堂兄弟結點
父節點下的所有子結點互為兄弟結點,如下圖,B,C,D結點互為兄弟結點
堂兄弟結點:位於同一層的,並且父節點之間是兄弟結點的結點互為堂兄弟結點,上圖中,E,G為堂兄弟結點,F和G也是堂兄弟結點,他們的父節點是兄弟結點。
(9)祖先(ancestor)和子孫(descendant)
這個關係就同父親和孩子一樣。從根結點到該結點路徑上的所有結點都為該結點的祖先,如下圖所示:
反之,C,G,H就是A的子孫,G和H都為C的子孫,H也可以稱為G的子孫,不過因為G和H只隔一代,所以一般稱為孩子
所有的結點都有一個公共祖先,就是根結點,但任意兩個結點可以不只一個祖先,比如E和F的公共祖先有A和B
(10)路徑(path)
從一個結點到另一個結點之間的邊和結點構成路徑,如下圖:
A到H的路徑包含A,C,G,H結點和連線這些結點的三條邊
(11)子樹根結點
如圖,A的子樹根結點為B,C,D。B的子樹根結點為E,F,D沒有子樹根結點
(12)層次(level)
樹是一個遞迴結構,所以也有層次這種概念,由層次也會引發出樹的深度,就好像遞迴也有深度一樣。結點的層次為從結點到根結點的路徑中邊的條數,並且認為根結點的層次為0,因為根結點到自身的路徑中邊的條數為0(但也有一些教科書假設根結點的層次為1,這個時候要注意書中相應的說明),如下圖所示,B的層次為1,G的層次為2,H的層次為3
結點的層次有時也稱為結點的深度(depth)
(13)樹的深度
與樹的度對應於結點的度一樣,樹的深度也是選取結點中的最大深度(或最大層次),下圖的樹的深度為3
樹的深度是一個自頂向下的概念,是從根結點出發,向著葉子結點方向前進的,並且深度這個概念一般只用來描述樹,當描述結點的深度時,層次更為恰當,但是用深度也無妨。
(14)結點的高度(height of node)
高度與深度不同,高度的描述是自下向頂的,而深度是自頂向下的,同一層次的結點的高度是可以不同的,下面先來介紹高度的概念。
從一個結點出發,一直到它的葉子結點的最大路徑中的邊的條數,就是該結點的高度,葉子結點的高度認為是0,因為從葉子結點出發,到它本身的路徑只有一條,並且邊數為0。下圖示出了所有結點的高度,可以觀察到,同一層次的葉子結點的高度不一定相同,因為它們的葉子結點的最大層次是不同的。
這裡,由於A結點到葉子結點的最大路徑為A->C->G->H,而不是A->B->E(F)和A->D,所以它的高度是3,因為最大路徑的邊數為3
(15)樹的高度
樹的高度就是根結點的高度,如上圖所示,該樹的高度為3
(16)森林(forest)
森林的概念和樹的概念是密切聯絡的。
森林就是彼此不相交的樹的集合,樹也可以看成是森林共有一個根結點後的結構,如下圖所示:
上圖示記出來的就是三棵子樹,他們構成一個(子樹)森林,如果給這三棵子樹共有一個結點,那麼就構成一個樹
這個樹是A,森林是子樹B,C,D的集合,可以看出森林和樹是兩個密切相關的概念。
https://blog.csdn.net/weixin_41133154/article/details/80027285 轉載內容結束
以下內容轉自 https://blog.csdn.net/qq_36667170/article/details/84142019
https://blog.csdn.net/qq_36667170/article/details/84142019 轉載內容結束
樹的高度和深度
深度定義是從上往下的,高度定義是從下往上的。(其實不用在意這個,反正樹的深度高度怎麼數都一樣的)。
深度和高度涉及到結點的層數,有的教材規定根結點在第0層,有的則規定根結點在第1層。原理都是一樣的,因教材而異。
樹從根結點開始往下數,葉子結點所在的最大層數稱為 樹的深度。
有的教材對於樹的高度定義是高度就是深度(層數是0123,深度=高度=3;層數是1234,深度=高度=4);而有的教材樹的高度則是看一共有幾層。也就是說不論根節點在第幾層,樹的深度都是和最大層的葉子節點一樣。而樹的高度只要看有幾層就行了(0123是四層,1234也是四層)。
有兩種說法:
- 高度就是深度
- 看層數:
如果根結點第0,層數=深度=高度-1
如果根結點第1,層數=深度=高度
圖 | 左 | 右 |
---|---|---|
層數 | 從第0層開始 | 從第1層開始 |
最大層數 | 4 | 5 |
深度 | 4 | 5 |
高度(高度=深度) | 4 | 5 |
高度(數層數) | 5 | 5 |
根節點在第0層時候,按照北大資料結構視訊的說法就是高度數結點數,深度數路徑。從A到G,節點是5層,中間有4段路徑,所以深度4,高度5。
其實也可以理解為數高度時候葉子結點從1開始數。因此空數高度0,只有一個根節點高度1。
但是在清華大學 鄧俊輝資料結構書中如下:
這本書中可以看出數高度時候葉子結點是從0開始的,因此空數高度-1,只有一個根節點高度0。
結點的高度和深度
結點的深度也是從根結點開始數,是第幾層也決定於根結點在第0層還是第1層。根結點的高度則取決於它的子樹,該節點子樹中最遠的那個葉子結點作為1開始數。
B的子樹是C和D,數B的高度時候,B的子樹中離B最遠的葉子節點是G,所以G高度為1,B高度4,D高度3。但是C是葉子節點,C沒有真子樹,C高度就是1。
圖 | 左 | 右 |
---|---|---|
BCD高度(葉子節點>=0) | 4 1 3 | 4 1 3 |
BCD高度(葉子節點>0) | 3 0 2 | 3 0 2 |
BCD深度 | 1 2 2 | 2 3 3 |
https://blog.csdn.net/qq_36667170/article/details/84142019 轉載內容結束
相關文章
- 樹套樹
- BST(二叉搜尋樹)、AVL樹、紅黑樹、2-3樹、B樹、B+樹、LSM樹、Radix樹比較
- 樹:基本樹形
- Trie樹,字典樹
- 多路查詢樹(2-3 樹、2-3-4 樹、B 樹、B+ 樹)
- 二叉樹、B樹以及B+樹二叉樹
- 平衡二叉樹,B樹,B+樹二叉樹
- 淺談樹形結構的特性和應用(上):多叉樹,紅黑樹,堆,Trie樹,B樹,B+樹...
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- P3380 【模板】二逼平衡樹(樹套樹)
- 資料結構之樹( 線段樹,字典樹)資料結構
- 樹上染色(樹形dp)
- 資料結構之MySQL獨愛B+樹(二叉樹、AVL樹、紅黑樹、B樹對比)資料結構MySql二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 雜湊,二叉樹,紅黑樹,B樹,B+樹,LSM樹等資料結構做索引比較二叉樹資料結構索引
- 樹套樹從入門到去世
- 字典樹(字首樹)簡單實現
- 樹和二叉樹簡介二叉樹
- Note - 樹分治(點分治、點分樹)
- Chapter 3 樹與二叉樹APT二叉樹
- 基環樹和笛卡爾樹
- n叉樹vs二叉樹二叉樹
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 貓樹
- 樹堆
- DFS樹
- 字首樹
- 主席樹
- 字典樹
- 左偏樹
- 平衡樹
- 樹論
- 小樹
- 失配樹
- zkw樹
- 樹上的等差數列 [樹形dp]
- [樹形dp][HAOI2015]樹上染色
- *衡樹 Treap(樹堆) 學習筆記筆記