資料結構——樹,資料結構

來源:互聯網
上載者:User

資料結構——樹,資料結構

一、樹的定義

樹是n(n>=0)個結點的有限集。n=0時稱為空白樹,在任意一顆非空樹:1、有且僅有一個特定的根結點。2、當n>1時其餘結點可分為m(m>0)個互不相交的有限集T1、T2、.....Tm,其中每一個集合本身又是一棵樹,並且稱為根的子樹。

二、結點的度,擁有的子樹稱為結點的度


如結點A的度是2,結點B的度是1,結點C的度是2,結點E的度是3,結點G的度是0

度為0的節點稱為葉子結點,度不為0的結點稱為分支結點。

三、結點之間的關係

如,結點的子樹稱為根的孩子,該結點稱為孩子的雙親。

同一個雙親的孩子之間稱為兄弟。

某結點為根的子樹中任意一個結點都稱為該結點的子孫。

四、樹的深度


結點的層次從根開始定義,樹種結點的最大層次稱為樹的深度或 高度。

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

五、樹的儲存結構--雙親標記法


typedef int TElemType; typedef struct PTNode{ //結點結構TElemType data;int parent;}PTNode;typedef struct{ //結點數組PTNode nodes[MAX_TREE_SIZE];int r, n;//根的位置和結點數}PTree;
這樣的結構很容易找到雙親,如果要找到結點的孩子就需要遍曆整個結構。我們可以再增加一個存放左邊孩子的域來解決,儲存結構的設計是一個非常靈活的過程。一個儲存結構設計的是否合理,取決於基於該儲存結構的運算是否合適,是否方便,時間複雜度好不好等。

六、樹的儲存結構--孩子標記法

我們知道每個結點的孩子的個數是不同的,所以我們要儲存孩子的地址就有兩種方法,第一種就是指標域的個數等於樹的度,第二種就是指標域的個數等於該結點的度。



#define MAX_TREE_SIZE 100typedef struct CTNode{int child;struct CTNode *next;} *ChildPtr;typedef struct{TElemType data;ChildPtr firstchild;}CTbox;typedef struct{CTbox nodes[MAX_TREE_SIZE];int r, n;}CTree;
七、樹的儲存結構--雙親孩子標記法

八、樹的儲存結構--孩子兄弟標記法

任意一棵樹,它的結點的第一個孩子如果存在就是唯一的,它的右兄弟如果存在也是唯一的。因此,我們設定兩個指標,分別指向該結點的第一個孩子和此結點的右兄弟。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.