日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

数据结构 树(Tree)的基本知识

發(fā)布時(shí)間:2024/5/14 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构 树(Tree)的基本知识 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

樹形結(jié)構(gòu)的基本概念

  • 節(jié)點(diǎn)(node): 樹上的每一個(gè)元素都是節(jié)點(diǎn)
  • 根節(jié)點(diǎn): 一棵樹最頂端的節(jié)點(diǎn)稱為根節(jié)點(diǎn)
    • 每棵樹最多有一個(gè)根節(jié)點(diǎn)
    • 空樹沒有根節(jié)點(diǎn)
  • 父節(jié)點(diǎn): 與一個(gè)節(jié)點(diǎn)直接連接,并且在它的頭上的節(jié)點(diǎn)即是它的父節(jié)點(diǎn)
  • 子節(jié)點(diǎn): 與一個(gè)節(jié)點(diǎn)直接連接,并且在它的底下的節(jié)點(diǎn)即是它的子節(jié)點(diǎn)
  • 兄弟節(jié)點(diǎn): 與同一個(gè)父節(jié)點(diǎn)直接連接的所有節(jié)點(diǎn)都是兄弟節(jié)點(diǎn)
  • 節(jié)點(diǎn)的度(degree): 一個(gè)節(jié)點(diǎn)的子樹的個(gè)數(shù)稱為該節(jié)點(diǎn)的度
    • 一個(gè)節(jié)點(diǎn)底下伸出幾個(gè)子節(jié)點(diǎn),該節(jié)點(diǎn)的度就為幾
  • 葉子節(jié)點(diǎn)(leaf): 沒有伸出任何子節(jié)點(diǎn)的節(jié)點(diǎn)即為葉子節(jié)點(diǎn)
    • 葉子節(jié)點(diǎn)的度為0
  • 非葉子節(jié)點(diǎn): 至少有一個(gè)子節(jié)點(diǎn)的節(jié)點(diǎn)即是非葉子節(jié)點(diǎn)
    • 非葉子節(jié)點(diǎn)的度不為0
  • 空樹: 沒有任何節(jié)點(diǎn)的樹叫做空樹
  • 子樹: 分為左子樹和右子樹
    • 左子樹: 以左子節(jié)點(diǎn)為根節(jié)點(diǎn)形成的樹稱為左子樹
    • 右子樹: 以右子節(jié)點(diǎn)為根節(jié)點(diǎn)形成的樹稱為右子樹
  • 樹的度: 樹中所有的節(jié)點(diǎn)的度中,最大值的度即為樹的度
  • 層數(shù)(level): 根節(jié)點(diǎn)所在的層數(shù)為第1層,根節(jié)點(diǎn)的子節(jié)點(diǎn)在第2層,依次類推(有的教程是從第0層開始計(jì)算)
  • 節(jié)點(diǎn)的深度(depth): 從根節(jié)點(diǎn)到當(dāng)前節(jié)點(diǎn)的簡(jiǎn)單路徑上的節(jié)點(diǎn)總數(shù)即為節(jié)點(diǎn)的深度
  • 節(jié)點(diǎn)的高度(height): 從當(dāng)前節(jié)點(diǎn)到最遠(yuǎn)葉子節(jié)點(diǎn)的簡(jiǎn)單路徑上的節(jié)點(diǎn)總數(shù)即為節(jié)點(diǎn)的高度
  • 樹的高度:?所有節(jié)點(diǎn)高度中的最大值,根節(jié)點(diǎn)到最遠(yuǎn)葉子節(jié)點(diǎn)的節(jié)點(diǎn)個(gè)數(shù)
  • 樹的深度:?所有節(jié)點(diǎn)中深度的最大值,同樣也是根節(jié)點(diǎn)到最遠(yuǎn)葉子節(jié)點(diǎn)的節(jié)點(diǎn)個(gè)數(shù)
    • 樹的高度等于樹的深度
  • 有序樹(常用): 樹中的任意節(jié)點(diǎn)的子節(jié)點(diǎn)之間有順序關(guān)系,所以不能調(diào)換兄弟節(jié)點(diǎn)的位置. (對(duì)節(jié)點(diǎn)進(jìn)行了排序的樹)
  • 無序樹: 樹的任意節(jié)點(diǎn)的子節(jié)點(diǎn)之間沒有順序關(guān)系

二叉樹(Binary Tree)

  • 二叉樹的特點(diǎn):
  • 所有節(jié)點(diǎn)的最大的度為2(即最多擁有2棵子樹)
  • 左子樹和右子樹是有順序的,不能交換左子樹和右子樹的位置
  • 即使某節(jié)點(diǎn)只有一棵子樹,也要區(qū)分該子樹是左子樹還是右子樹
  • 二叉樹的性質(zhì)
  • 非空二叉樹的第i層,最多有2^(i-1)個(gè)節(jié)點(diǎn)(i>=1)
  • 在高度為h的二叉樹上最多有2^h - 1個(gè)節(jié)點(diǎn)(h>=1)
  • 對(duì)于任意一棵非空二叉樹,如果葉子節(jié)點(diǎn)個(gè)數(shù)為n0,度為2的節(jié)點(diǎn)個(gè)數(shù)為n2,則有: n0=n2+1 (考慮證明方式)

真二叉樹(Proper Binary Tree)?

  • 真二叉樹:?所有的節(jié)點(diǎn)的度要么是2,要么是0,度不能為1

滿二叉樹(Full Binary Tree)

  • 所有的節(jié)點(diǎn)的度要么是2,要么是0,且所有的葉子節(jié)點(diǎn)都在最后一層(即每層節(jié)點(diǎn)都滿排布)

? 滿二叉樹的特點(diǎn):
? ? ?? ?滿二叉樹一定是真二叉樹,但是真二叉樹不一定是滿二叉樹
?? ??? ?假設(shè)滿二叉樹的高度和h(h>=1),那么
? ? ? ? 1, 第i層的節(jié)點(diǎn)數(shù): 2^(i-1)
? ? ? ? 2, 葉子節(jié)點(diǎn)的數(shù)量: 2^(h-1)
? ? ? ? 3, 總節(jié)點(diǎn)的個(gè)數(shù) n = 2^h - 1 (推論: 滿二叉樹的高度: h= log2(n+1))

完全二叉樹(Complete Binary Tree)

  • 葉子節(jié)點(diǎn)只會(huì)出現(xiàn)在最后2層,且最后1層的葉子節(jié)點(diǎn)都是靠左對(duì)齊

?完全二叉數(shù)的特點(diǎn):
?? ?1,完全二叉樹的節(jié)點(diǎn)從上到下,從左到右依次滿排布(偽滿二叉樹),如果排布滿了就是滿二叉樹
? ? 2,完全二叉樹從根節(jié)點(diǎn)到倒數(shù)第2層的所有節(jié)點(diǎn)組成的樹是一棵滿二叉樹
? ? 3,滿二叉樹一定是完全二叉樹,完全二叉樹不一定是滿二叉樹
完全二叉樹的性質(zhì):
?? ?1,度為1的節(jié)點(diǎn)的子樹只能是左子樹不能是右子樹
? ? 2,度為1的節(jié)點(diǎn)要么是1個(gè),要么是0個(gè)
? ? 3,同樣節(jié)點(diǎn)數(shù)量的二叉樹,完全二叉樹的高度最小
? ? 4,假如完全二叉樹的高度為h(h>=1),那么最少有 2^(h-1)個(gè)節(jié)點(diǎn),最多有2^h -1個(gè)節(jié)點(diǎn)
? ? 5,完全二叉樹的總結(jié)點(diǎn)數(shù)量為n,高度為h,那么2^(h-1)<= n < 2^h 取對(duì)數(shù)之后:h-1<= log2(n) < h
? ? ? ? 可推導(dǎo)出: log2(n)< h <= log2(n)+1,又由于h為整數(shù)
? ? ? ? 可推導(dǎo)出: h = floor(log2(n))+1 ?注意: floor()向下取整, ceiling向上取整

證明: 如果完全二叉樹的總結(jié)點(diǎn)是n, 當(dāng) n為偶數(shù)時(shí), 葉子節(jié)點(diǎn)數(shù)量 n0 = n /2 , 當(dāng)n為奇數(shù)時(shí), 葉子節(jié)點(diǎn)數(shù)量 n0 = (n + 1) / 2 ?

二叉查找樹(Binary Search Tree) (二叉搜索樹)

二叉查找樹的特點(diǎn):
?? ?1,每一個(gè)節(jié)點(diǎn)最多有兩個(gè)子節(jié)點(diǎn)(滿足二叉樹特點(diǎn))
?? ?2,任何一個(gè)節(jié)點(diǎn)的左子節(jié)點(diǎn)都比自己小,右子節(jié)點(diǎn)都比自己大
? ? 3,任何一個(gè)節(jié)點(diǎn)的左右子樹都是二叉搜索樹
二叉查找樹存儲(chǔ)的元素必須具備可比較性:
?? ?1,自定義類型必須指定比較方式,不允許為null(null類型沒法比較)

平衡二叉樹

平衡二叉樹的特點(diǎn):
?? ?1,二叉樹的左子樹和右子樹高度差不超過1
? ? 2,任意節(jié)點(diǎn)的左子樹和右子樹都是一棵平衡二叉樹

紅黑樹(平衡二叉B樹)

  • 紅黑樹是一種自平衡的二叉查找樹,是計(jì)算機(jī)科學(xué)中用到的一種數(shù)據(jù)結(jié)構(gòu),紅黑樹不是高度平衡的,它的平衡是通過"紅黑規(guī)則"實(shí)現(xiàn)的

紅黑樹和平衡二叉樹之間的區(qū)別:
?? ?平衡二叉樹是高度平衡的,當(dāng)平衡二叉樹的左子樹和右子樹高度差超過1時(shí),就會(huì)通過旋轉(zhuǎn)來達(dá)到再次平衡
? ? 紅黑樹不是高度平衡的,只有當(dāng)不滿足"紅黑規(guī)則"時(shí)才會(huì)旋轉(zhuǎn)

  • 紅黑規(guī)則

?1,每一個(gè)節(jié)點(diǎn)要么是紅色要么是黑色的
?2,根節(jié)點(diǎn)必須是黑色的
?3,如果一個(gè)節(jié)點(diǎn)沒有子節(jié)點(diǎn),則該節(jié)點(diǎn)里面的指向子節(jié)點(diǎn)的指針屬性值為Nil,這個(gè)Nil視為葉子節(jié)點(diǎn),每個(gè)葉子節(jié)點(diǎn)(Nil)是黑色的
?4,如果某一個(gè)節(jié)點(diǎn)是紅色的,那么它的子節(jié)點(diǎn)必須是黑色的(即不能出現(xiàn)兩個(gè)紅色節(jié)點(diǎn)相連接的情況)
?5,對(duì)于每一個(gè)節(jié)點(diǎn),從該節(jié)點(diǎn)到其所有后代葉子節(jié)點(diǎn)的簡(jiǎn)單路徑上,均包含相同數(shù)目的黑色節(jié)點(diǎn)

總結(jié)

以上是生活随笔為你收集整理的数据结构 树(Tree)的基本知识的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。