#define MAXSIZE 100 // 樹中結點個數的最大值 typedef char datatype; // 結點值的類型 // 結點的類型 typedef struct node { datatype data; int parent; // 結點雙親的下標 } node; // 樹的類型 typedef struct tree { node treelist[MAXSIZE]; // 存放結點的數組 int length, root; // 樹中實際所含結點的個數及根節點的位置 } tree;
前序遍歷:首先訪問根結點,再從左到右依次按前序遍歷的方式訪問根結點的每一棵子樹node
後序遍歷:首先按後序遍歷的方式訪問根結點的每一棵子樹,而後再訪問根結點算法
層序遍歷:首先訪問第一層上的根結點,而後從左到右依次訪問第二層上的全部結點,……,最後訪問樹中最低一層的全部結點。數組
圖樹的遍歷:spa
樹的遍歷經常使用操做:設計
經常使用操做:code
圖樹的括號表示:blog
經常使用操做:遞歸
圖樹的層號表示:class
樹最適合用來表示具備有序性和層次性的數據基礎
在選擇存儲結構時,既要考慮數據值自己的存儲,還須要考慮數據間關係的存儲
(真題)對於一顆具備 \(n\) 個結點的樹,該樹中全部結點的度數之和爲 \(n-1\)
已知一棵度爲 \(m\) 的樹中有 \(n_1\) 個度爲 \(1\) 的結點, \(n_2\) 個度爲 \(2\) 的結點,……,\(n_m\) 個度爲
\(m\) 的結點,問該樹中有多少個葉子結點?
樹中結點總數 \(n=n_0+n_1+n_2+…+n_m\)
樹中結點的度數之和爲 \(n-1\),且有:\(n-1=n_1+2*n_2+3*n_3+\cdots+m*n_m\) (用上題 \(3\) 的定理)
因此葉子結點個數爲:\(n_0=1+n_2+2*n_3+\cdots+(m-1)*n_m\)