数据结构之—树
一、樹的定義及一些基本術語
樹:樹是一類重要的非線性數據結構,是以分支關系定義的層次結構
樹的一些基本術語:
- 結點(node)——樹中的元素,包括數據項及若干指向其子樹的分支
- 結點的度(degree)——結點擁有的子樹數
- 樹的度——一棵樹中最大的結點度數
- 葉子(leaf)——度為0的結點
- 孩子(child)——結點子樹的根稱為該結點的孩子
- 雙親(parents)——孩子結點的上層結點
- 兄弟(sibling)——同一雙親的孩子
- 結點的層次(level)——從根結點算起,根為第一層,它的孩子為第二層……
- 樹的深度(depth)/高度——樹中結點的最大層次數
- 森林(forest)——m(m?0)棵互不相交的樹的集合
- 子孫——一個結點所有子樹中的結點。
- 祖先——從根結點到達某結點路徑上的所有結點。
- 有序樹/無序樹——如果一棵樹中結點的各子樹從左到右是有次序的,即交換了某結點各子樹的相對位置, 則構成不同的樹,那么稱該樹為有序樹。反之,為無序樹。
- 基本形態
二、二叉樹(重點)
- 定義:二叉樹是n>=0個結點的有限集,它或為空樹(n=0),或由一個根結點和兩棵分別稱為左、右子樹的互不相交的二叉樹構成
- 特點:度為2的有序樹
- 基本形態
- 性質:
- 二叉樹第i層最多2i-1個結點(i>=1)
- 深度為k的二叉樹至多有2k-1個結點(k>=1)
- 對任何一棵二叉樹T,如果其終端結點數為n0,度為2的結點數為n2,則n0=n2+1。 或:二叉樹的葉子結點數等于雙分支結點數加1。
- 滿二叉樹:一顆深度為K且結點數為2k-1的樹,即除了最后一層都沒有空孩子且只有最后一層有且全為葉結點
- 完全二叉樹:
- 定義:深度為k, 有n個結點的二叉樹當且僅當其每一個結點都與深度為k的滿二叉樹中編號從1至n的結點一一對應。
- 特點:深度為k的完全二叉樹第1~k-1層必定為滿二叉樹,第k層的葉結點必定集中在左邊
- 性質:具有n個結點的完全二叉樹的深度為 |log2(n+1)|或|log2n|+1
- 完全二叉樹和滿二叉樹最主要的區別在于最后一層是否完整,(注:滿二叉樹是特殊的完全二叉樹)
三、二叉樹的遍歷
遍歷:如何按某條搜索路徑訪問二叉樹中的每個頂點,使每個節點被訪問一次且僅被訪問一次
常見方法:
- 先序遍歷:先訪問根結點,然后分別先序遍歷左子樹、右子樹
- 中序遍歷:先中序遍歷左子樹,然后訪問根結點,最后中序遍歷右子樹
- 后序遍歷:先后序遍歷左、右子樹,然后訪問根結點
- 按層次遍歷:從上到下、從左到右訪問各結點
用一張圖來解釋
轉載于:https://www.cnblogs.com/damocleses/p/10660979.html
總結
- 上一篇: redis-sentinel主从复制高可
- 下一篇: 带拦截器配置的 struts.xml文件