1.概念與性質
樹是一種非線性結構,與前面的鍊錶棧與佇列(線性結構)不同。樹(tree)是由n(n>=0)個節點構成的有限集合。
當n=0,就為空樹。
當n>0,必有乙個樹根(root),除了樹根,其餘的節點可以劃分為很多個子集,也叫子樹。
樹的邊說有方向性的,只能從樹根指向某一節點,「只能從上到下」,有且只有一條路徑,反之亦然。
術語:節點的度是指乙個節點其子樹的個數。
樹的度樹中所有節點中最大的度數。
子節點對某一節點而言,其子樹的跟節點。父節點反過來。
節點的層次:根節點為第一層,依次往下數。樹的深度也就說最大層次。
2.二叉樹
任意節點的最大度為2。若二叉樹不為空,則必然有乙個根節點,以及有兩個分別為左子樹和右自樹的子樹。這兩個子樹當然也是二叉樹。
二叉樹的鏈式儲存code
struct treenode
struct treenode*t;
t=null;/*建立很簡單*/
3.二叉樹的操作
二叉樹的節點count
思路:若二叉樹位空,則返回0;
若不為空,澤必有乙個root和兩個子樹。所以二叉樹的節點數count為1+左子樹的節點數+右子樹的節點數。
code
int count(struct treenode){
if(t==
null)
return
0; return
1+count(t->left)+
count
(t->right)
;}/*這裡用到了遞迴的思想,因為為二叉樹,根據二叉樹的特點,用函式遞迴呼叫*/
下一節會講到求葉節點(度數為0的節點,「樹葉」)的數量,樹高,以及如何遍歷二叉樹來確定樹的形狀。 C 資料結構 樹
樹的定義是遞迴的,用樹來定義樹。因此,樹 以及二叉 樹 的許多演算法都使用了遞迴。結點 node 表示樹中的資料元素。結點的度 degree of node 結點所擁有的子樹的個數。樹的度 degree of tree 樹中各結點度的最大值。葉子結點 leaf node 度為 0 的結點,也叫終端結...
資料結構 樹的學習 (1)
樹的概念 樹是n n 0 個結點的有限集,n 0 是稱為空樹,在任意一顆非空樹中 1 有且僅有乙個特定的稱為根的結點,2 當n 1時,其餘節點可分為m個互不相交的有限集,每個集合本身又是一棵樹,並且稱為根的子樹。結點分類 結點擁有的子樹數稱為結點的度。度為0的結點稱為葉結點或終端結點,度不為0的結點...
資料結構1 紅黑樹
紅黑樹是一顆二叉平衡查詢樹。使用情況 不斷地有資料插入 性質 每個節點不是紅色就是黑色 根節點總是黑色 如果節點是紅色,則它的子節點必是黑色的 從根節點到葉節點的每條路徑,黑高相同紅黑樹的三種修正方式 變色 左旋 右旋左旋操作 對x左旋,x的右子節點為y y的左子節點賦值給x的右節點,並將x賦值給y...