關於樹結構的定義

2021-08-21 07:22:14 字數 2356 閱讀 4519

其實關於樹就是一對多的資料結構,關於其的定義如下所示

樹(tree)是n(n≥0)個結點的有限集。n=0時稱為空樹。在任意一棵非空樹中:(1)有且僅有乙個特定的稱為根(root)的結點;(2)當n>1時,其餘結點可分為m(m>0)個互不相交的有限集t1、t2、……、tm,其中每乙個集合本身又是一棵樹,並且稱為根的子樹(subtree),關於其的結構如下所示

在樹當中的根節點是唯一的,不可能存在多個根節點,子樹的個數沒有限制,它們一定是互不相交的

樹的結點包含乙個資料元素及若干指向其子樹的分支。結點擁有的子樹數稱為結點的度(de-gree)。度為0的結點稱為葉結點(leaf)或終端結點;度不為0的結點稱為非終端結點或分支結點。除根結點之外,分支結點也稱為內部結點。樹的度是樹內各結點的度的最大值

結點的子樹的根稱為該結點的孩子(child),相應地,該結點稱為孩子的雙親(parent)同乙個雙親的孩子之間互稱兄弟(sibling),結點的祖先是從根到該結點所經分支上的所有結點下面的h結點的祖先是d、b、a,b結點的子孫是d、g、h、i

結點的層次(level)從根開始定義起,根為第一層,根的孩子為第二層。若某結點在第l層,則其子樹就在第l+1層。其雙親在同一層的結點互為堂兄弟,樹中結點的最大層次稱為樹的深度(depth)或高度

下圖當中的d、e、f是堂兄弟,g、h、i、j也是堂兄弟,下面的樹的深度為4

如果將樹中結點的各子樹看成從左至右是有次序的,不能互換的,則稱該樹為有序樹,否則稱為無序樹

森林(forest)是m(m≥0)棵互不相交的樹的集合。對樹中每個結點而言,其子樹的集合即為森林

關於線性表和樹的結構的對比

樹的抽象資料型別定義如下所示

adt 樹(tree)

data

樹是由乙個根結點和若干棵子樹構成。樹中結點具有相同資料型別及層次關係。

operation

inittree(*t): 構造空樹t。

destroytree(*t): 銷毀樹t。

createtree(*t, definition): 按definition中給出樹的定義來構造樹。

cleartree(*t): 若樹t存在,則將樹t清為空樹。

treeempty(t): 若t為空樹,返回true,否則返回false。

treedepth(t): 返回t的深度。

root(t): 返回t的根結點。

value(t, cur_e): cur_e是樹t中乙個結點,返回此結點的值。

assign(t, cur_e, value): 給樹t的結點cur_e賦值為value。

parent(t, cur_e): 若cur_e是樹t的非根結點,則返回它的雙親,否則返回空。

leftchild(t, cur_e): 若cur_e是樹t的非葉結點,則返回它的最左孩子,否則返回空。

rightsibling(t, cur_e): 若cur_e有右兄弟,則返回它的右兄弟,否則返回空。

insertchild(*t, *p, i, c): 其中p指向樹t的某個結點,i為所指結點p的度加上1,

非空樹c與t不相交,操作結果為插入c為樹t中p指結點的第i棵子樹。

deletechild(*t, *p, i): 其中p指向樹t的某個結點,i為所指結點p的度,

操作結果為刪除t中p所指結點的第i棵子樹。

endadt

mysql查詢樹結構 定義函式

修改一下函式,然後就可以使用了。查詢樹結構函式 mysql可用 drop function if exists queryupmsmenutree 函式名 create function queryupmsmenutree param id varchar 32 傳入引數 returns varch...

關於面試的樹結構簡單實現

我們面試的時候,會遇到這樣的筆試題目 如下面的資料 1 1 1 1 1 2 1 2 2 2 3 1 3 3 3 4 2 4 4 4 5 3 5 5 5 讓你簡單的設計一下,實現樹結構 其實也就是 id 和 pid 的問題,多的不說,直接上 哈哈,拙見,有不足之處請大家指出 首先是乙個測試類 也是乙個...

XML的樹結構

xml 文件形成了一種樹結構,它從 根部 開始,然後擴充套件到 枝葉 xml 使用簡單的具有自我描述性的語法 george john reminder don t forget the meeting 第一行是 xml 宣告。它定義 xml 的版本 1.0 和所使用的編碼 iso 8859 1 la...