樹狀圖是一種資料結構,它是由n(n>=1)個有限節點組成乙個具有層次關係的集合。把它叫做「樹」是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。它具有以下的特點:
每個節點有零個或多個子節點;沒有父節點的節點稱為根節點;每乙個非根節點有且只有乙個父節點;除了根節點外,每個子節點可以分為多個不相交的子樹;
**(靈魂畫師)
節點的度:乙個節點含有的子樹的個數稱為該節點的度;
葉節點或終端節點:度為0的節點稱為葉節點;
非終端節點或分支節點:度不為0的節點;
雙親節點或父節點:若乙個節點含有子節點,則這個節點稱為其子節點的父節點;
孩子節點或子節點:乙個節點含有的子樹的根節點稱為該節點的子節點;
兄弟節點:具有相同父節點的節點互稱為兄弟節點;
樹的度:一棵樹中,最大的節點的度稱為樹的度;
節點的層次:從根開始定義起,根為第1層,根的子節點為第2層,以此類推;
樹的高度或深度:樹中節點的最大層次;
堂兄弟節點:雙親在同一層的節點互為堂兄弟;
節點的祖先:從根到該節點所經分支上的所有節點;
子孫:以某節點為根的子樹中任一節點都稱為該節點的子孫。
森林:由m(m>=0)棵互不相交的樹的集合稱為森林;
遍歷表達法有3種方法:先序遍歷、中序遍歷、後序遍歷
定義一棵樹的根結點層次為1,其他節點的層次是其父結點層次加1。一棵樹中所有結點的層次的最大值稱為這棵樹的深度。
樹的實現主要有三個:
1.父節點表示法:該方法主要思路是,每個節點儲存父節點的位置,這樣就構成一棵樹
2.孩子鏈表示法:該方法的主要思路是,每個節點用陣列儲存孩子位置,不過這個表示法有個致命的缺陷,就是造成大量空間上的浪費,因為陣列最大的長度必定和最多的度相等,但是並不是每個子樹都有那麼多度,所以造成空間上的浪費;
3.兄弟孩子節點表示法:該方法主要思路是:每個節點儲存孩子,兄弟節點位置,本次就用這個表示法實現
下面**只實現了新增功能,有空再補上其他功能,其他功能也是大同小異,至於為什麼有個flag變數,因為我覺得樹里存在重複的變數,所以用flag來唯一標識乙個樹
package tree;
/* * 樹的整體
* @author wlnsss
* @time 2017.12.22
* */
public class mytree
// 在指定位置新增節點
public void add(t data, int flag) else
if (point.getchlid() != null)
// 元素標識+1
flag++;
} }// 定位節點位置,找出該節點
public node getnodepost(int flag)
// 定位節點位置,找出該節點
private node getnodepost(int flag, node ponit)
// 若兄弟節點非空,則遞迴取出元素
if (point.getbrother() != null)
// 若子節點非空,則遞迴取出元素
if (point.getchlid() != null)
// 若沒找到則返回null
return null;
} /*
* 樹的節點(內部類)
*/private class node
public void setdata(t data)
public node getchlid()
public void setchlid(node chlid)
public node getbrother()
public void setbrother(node brother)
public node(t data)
public node(t data, node chlid, node brother,int flag)
} public static void main(string args)
}
樹的雙親表示法,孩子表示法以及孩子兄弟表示法
目錄如下圖所示,這是一棵普通的樹,該如何儲存呢?通常,儲存具有普通樹結構資料的方法有 3 種 雙親表示法 孩子表示法 孩子兄弟表示法 圖1雙親表示法採用順序表 也就是陣列 儲存普通樹,其實現的核心思想是 順序儲存各個節點的同時,給各節點附加乙個記錄其父節點位置的變數。注意,根節點沒有父節點 父節點又...
樹的儲存結構 雙親表示法 孩子表示法 孩子兄弟法
實現 定義結構陣列存放樹的結點,每個結點包含兩個域 結點結構 結點型別定義 typedef struct ptnode ptnode 另外,用r儲存根結點的下標,用n表示結點個數 樹的雙親表示法示例 樹結構型別定義 define max tree size 100 typedef struct pt...
C語言實現實現樹和森林(孩子兄弟表示法)
因為樹和森林都可以與二叉樹相互轉化,所以採用二叉鍊錶的儲存方式表示樹和森林容易在計算機中實現 共有10個節點,則有11個空指標 fristchild指向該結點的第乙個孩子節點,nextsibling指向該結點的兄弟節點。雖然類似於二叉樹的左右孩子節點指標,但是功能不同 define elemtype...