樹的概念
子節點和父節點(是相對定義的):
一棵樹的根節點稱為該樹的子樹的根節點的父節點
子樹的根是樹根的子節點
邊:從父節點到子節點的連線(邊有方向)
兄弟節點:父節點相同的節點互為兄弟節點
樹葉、分支節點:沒有子節點的節點稱為樹葉,樹中的其餘節點稱為分支節點(分支節點可只有乙個分支)
祖先和子孫:基於父節點/子節點關係和傳遞性,可以確定相應的傳遞關係,稱為祖先關係或子孫關係
度數:乙個節點的子節點個數稱為該節點的度數
路徑、路徑長度:
從乙個祖先節點到其子孫節點的一系列邊稱為樹中一條路徑(從一棵樹的根到樹中任乙個節點都有唯一路徑)
路徑中邊的條數稱為路徑的長度,認為每個節點到自身有長0的路徑
節點的層數:
樹根到節點的路徑長度是該節點的層數
節點都有層數,根所在的層為0
高度(或深度):
樹的高度或深度是樹中節點的最大層數(最長路徑的長度)加1
空樹高度為0,只有根節點的樹高度為1
二叉樹的定義:
二叉樹是一種樹形結構:
特點是與每個節點關聯的子節點至多有兩個(可為0,1,2)
每個節點的子節點有關聯位置關係
定義:
二叉樹是節點的有限集合,該集合或為空集,或由乙個根元素和兩棵不相交的二叉樹組成(遞迴定義)
二叉樹的兩棵子樹分別稱為它的左子樹和右子樹
二叉樹的5種基本形態:
滿的和完全的二叉樹:
滿二叉樹:樹中每個分支節點(非葉節點)都有兩棵非空子樹
完全二叉樹:除最下兩層外,其餘節點度數都是2,如果最下面的節點不滿,則所有空位都在右邊,左邊沒有空位,如下圖
擴充二叉樹(由已有非空二叉樹生成的一種二叉樹):
是原二叉樹的最小節點擴充,使原樹中所有節點的度數都變成2
二叉樹的性質:
性質1. 非空二叉樹第 i 層上至多有 2i 個結點(i ≥ 0)
性質2. 高度為 k 的二叉樹至多有 2k-1 個結點(k ≥ 0)
性質3. 對任何非空二叉樹 t,若其葉結點個數為 n0,度數為 2 的結點
個數為 n2,則n0 = n2 + 1
性質4. n 個結點的完全二叉樹的高度 k = ⎡log2(n+1)⎤
性質5. 滿二叉樹裡的葉結點比分支結點多乙個
二叉樹的資料結構
基本操作
建立二叉樹
一棵二叉樹或為空(用 none 表示),或是兩棵已有二叉樹和要存在樹根結點的一項資料,構造起的根結點代表構造出的二叉樹:
bitree(dat, left, right)
判斷樹空:is_empty(bitree)
訪問操作,訪問二叉樹的組成成分:
訪問二叉樹的根結點資料元素:data()
取得一棵二叉樹的左右子樹:right(),left()
二叉樹的定義
滿二叉樹 除葉子結點外,所有結點均有兩個子結點。所有葉子結點在同一層。完全二叉樹 若設二叉樹的深度為h,除第 h 層外,其它各層 1 h 1 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹 可以根據公式進行推導,假設n0是度為0的結點總數 即 葉子結點 數 n1是度...
二叉樹的定義
二叉樹的基本資料結構 使用陣列構造二叉樹 迭代方式實現先序 中序遍歷 水平遍歷 class btree else public function setleft bt2 public function setright bt2 public function setkey key function ...
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...