C 資料結構 樹

2022-03-19 06:07:33 字數 2141 閱讀 3859

樹的定義是遞迴的,用樹來定義樹。因此,樹(以及二叉 樹)的許多演算法都使用了遞迴

結點(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類的實現:

public

class 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

}

bitree

二叉樹的遍歷: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.家族樹 在現實生活中,有入如下血統關係的家族可用樹形圖表示 張源有三個孩子張明 張亮和張麗 張明有兩個孩子張林和張維 張亮有三個孩子張平 張華和張群 張平有兩個孩子張晶和張磊。以上表示很像一棵倒畫的樹。其中 樹根 是張源,樹的 分支點 是張明 張亮和張平,該家族的其餘成員均是 樹葉 而...