樹的定義是遞迴的,用樹來定義樹。因此,樹(以及二叉 樹)的許多演算法都使用了遞迴。
結點(node):表示樹中的資料元素。
結點的度(degree of node):結點所擁有的子樹的個數。
樹的度(degree of tree):樹中各結點度的最大值。
葉子結點(leaf node):度為 0 的結點,也叫終端結點。
結點的層次(level of node):從根結點到樹中某結點所經路徑上的分支 數稱為該結點的層次。根結點的層次規定為 1,其餘結點的層次等於其雙親結點 的層次加 1。
二叉樹的形態共有 5 種:空二叉樹、只有根結點的二叉樹、右子樹為空的二 叉樹、左子樹為空的二叉樹和左、右子樹非空的二叉樹。
滿二叉樹(full binary tree):如果一棵二叉樹只有度為 0 的結點和度為 2 的結點,並且度為 0 的結點在同一層上。
完全二叉樹(complete binary tree):深度為 k,有 n 個結點的二叉樹當且僅當其每乙個結點都與深度為 k,有 n 個結點的滿二叉樹中編號從1到n 的結點一一對應時
二叉樹的二叉鍊錶儲存結構:乙個資料域和兩個引用域。
不帶頭結點的 二叉樹的二叉鍊錶的類 bitree類的實現:
publicbitreeclass bitree
set }
//構造器
public
bitree()
//構造器
public
bitree(t val)
//構造器
public bitree(t val, nodelp, noderp)
//判斷是否是空二叉樹
public
bool
isempty()
else
}//獲取根結點
public noderoot()
//獲取結點的左孩子結點
public nodegetlchild(nodep)
//獲取結點的右孩子結點
public nodegetrchild(nodep)
//將結點p的左子樹插入值為val的新結點,原來的左子樹成為新結點的左子樹
public
void insertl(t val, nodep)
//將結點p的右子樹插入值為val的新結點,原來的右子樹成為新結點的右子樹
public
void insertr(t val, nodep)
//若p非空,刪除p的左子樹
public nodedeletel(nodep)
node
tmp =p.lchild;
p.lchild = null
;
return
tmp;
}//若p非空,刪除p的右子樹
public nodedeleter(nodep)
node
tmp =p.rchild;
p.rchild = null
;
return
tmp;
}//判斷是否是葉子結點
public
bool isleaf(nodep)
else
}
二叉樹的遍歷:dlr(先序遍歷)、ldr(中序遍歷)和 lrd(後序遍歷),層序遍歷(level order)。
哈夫曼樹(huffman tree),又叫最優二叉樹,指的是對於一組具有確定權值 的葉子結點的具有最小帶權路徑長度的二叉樹。
C 資料結構之樹
樹在資料結構是乙個極其重要的存在,例如二叉樹,排序二叉樹,平衡二叉樹,紅黑樹等等在許多專案中運用比較廣,而且也是平時考察的重點,所以今天就來系統地談一談樹 樹 定義 n個結點的有限集合,當n等於0時,稱為空樹,n個結點的樹只有n 1條邊,有如下性質。有且僅有乙個特定的稱為根的結點 當n 1時,其餘結...
資料結構(C)樹(1)
1.概念與性質 樹是一種非線性結構,與前面的鍊錶棧與佇列 線性結構 不同。樹 tree 是由n n 0 個節點構成的有限集合。當n 0,就為空樹。當n 0,必有乙個樹根 root 除了樹根,其餘的節點可以劃分為很多個子集,也叫子樹。樹的邊說有方向性的,只能從樹根指向某一節點,只能從上到下 有且只有一...
資料結構 樹
樹的概念 1.家族樹 在現實生活中,有入如下血統關係的家族可用樹形圖表示 張源有三個孩子張明 張亮和張麗 張明有兩個孩子張林和張維 張亮有三個孩子張平 張華和張群 張平有兩個孩子張晶和張磊。以上表示很像一棵倒畫的樹。其中 樹根 是張源,樹的 分支點 是張明 張亮和張平,該家族的其餘成員均是 樹葉 而...