一:樹的定義
樹是一種資料結構,由n(n>1)個有限結點組成一個有層次關係的集合。形狀像一顆倒立的樹而得名。分為:無序樹,有序樹,二叉樹,滿二叉樹,完全二叉樹,平衡二叉樹(AVL),二叉查詢樹(二叉搜尋樹、BST),霍夫曼樹,紅黑樹,B-tree(B-樹或者B樹),B+樹,B*樹等。
節點結構體(C/C++)表示為:
typedef struct treeNode
{
void *val; //資料項,任意型別
struct treeNode *left; //左子節點指標
struct treeNode *right; //右子節點指標
}node;
節點類(Java)表示為:
public class TreeNode {
private Object data; //資料項
private TreeNode leftChild; //左子節點的引用
private TreeNode rightChild; //右子節點的引用
}
二:樹的特點
1.根節點沒有父節點。
2.每個非根節點只有一個父節點。
3.每個節點有零個或多個子節點。
三:相關術語
1.節點的度:節點含有子樹的個數
2.葉子節點:節點的度為0。
3.子節點:一個節點含有的子樹的根節點稱為該節點的子節點。(這句有點繞口,舉例:上圖a,b,c是R的子節點)
4.父節點:含有子節點的節點,成為子節點的父節點。
5.兄弟節點:父節點相同的節點。
6.堂兄弟節點:父節點為兄弟節點的節點。
7.樹的度:最大的節點的度稱為樹的度
8.樹的高度或深度:樹種節點的最大層次。
9.森林:n(n>=0)顆互不相交樹的集合。
四:樹的遍歷
1.前序遍歷
遍歷順序:訪問根節點--->遍歷左子樹--->遍歷右子樹
2.中序遍歷
遍歷順序:遍歷左子樹--->訪問根節點--->遍歷右子樹
3.後序遍歷
遍歷順序:遍歷左子樹--->遍歷右子樹--->訪問根節點