之前我們講的都是一對一的線性結構,在實際應用上,還有許多一對多的情況需要我們去處理,所以這一篇我要講一種一對多的資料結構——樹。
對於a來說,它和b、c、d都有關係,對於b來說它和e、f都有關係,這就是「一對多」的關係
樹的概念
結點:樹中的每乙個元素都是乙個結點,如a、b、c。
父結點:對於b、c、d來說,a是它們的父結點。
子結點:對於a來說,b、c、d都是它的子結點。
根結點:如果乙個結點沒有父結點,那麼個結點就是根結點。
兄弟結點:對於b、c、d來說它們是兄弟結點,對於e、f來說它們也是兄弟結點。
葉子結點:如果結點沒有任何子結點,那麼此結點為葉子結點。例如(k、l、f、g、m、i、j)
樹的層次:從根開始定義,根為第一層,根的孩子(bcd)為第二層,(bcd)的孩子為第三層,以此類推。
結點的度:對於a來將,它的度是3(bcd),對於b來講它的度是2(ef)。
滿二叉樹和完全二叉樹
如果二叉樹中除了葉子結點,每個結點的度都為2,那麼此二叉樹為滿二叉樹
如果二叉樹中有一層結點的子樹中不是從左到右分布那麼它就是完全二叉樹
圖1和2都是二叉樹,但是圖2是完全二叉樹,圖一是滿二叉樹(二叉樹中各個結點的度最多是2,可以是0,1,2)
二叉樹的結點構成
lchild 代表指向左孩子的指標域;data 為資料域;rchild 代表指向右孩子的指標域。使用此種結點構建的二叉樹稱為「二叉鍊錶」。
**實現
#include
#define telemtype int
//利用佇列遍歷二叉樹
//初始化隊頭和隊尾指標開始時都為0
int front=0,rear=0;
typedef
struct
bitnodebitnode,*bitree;
複製**
建立樹//前面學過指標的應該有基礎了,這裡我就不過多講解了
void
createbitree
(bitree *t)
複製**
void
enqueue
(bitree *a,bitree node)
//出隊函式
bitnode* dequeue
(bitnode** a)
//輸出函式
void
displaynode
(bitree node)
intmain
() if (p->rchild!=null)
}return0;}
複製**
1 2 3 4 5 6 7 資料結構 樹
樹的概念 1.家族樹 在現實生活中,有入如下血統關係的家族可用樹形圖表示 張源有三個孩子張明 張亮和張麗 張明有兩個孩子張林和張維 張亮有三個孩子張平 張華和張群 張平有兩個孩子張晶和張磊。以上表示很像一棵倒畫的樹。其中 樹根 是張源,樹的 分支點 是張明 張亮和張平,該家族的其餘成員均是 樹葉 而...
資料結構 樹
1 定義 樹是一種非線性結構,是一種一對多的資料結構。分析樹的結構,我們用遞迴的方法,根結點下面又可以看做是子樹。2 樹的儲存結構 我們一般用孩子兄弟法儲存。也就是把乙個結點的左邊第乙個孩子放在此結點的左邊孩子,把此結點的右兄弟放在此結點的右邊孩子。這樣就產生了二叉樹。二叉樹和樹可以相互對應。3 二...
資料結構 樹
二叉樹性質回顧 滿二叉樹 完全二叉樹等 給定一棵二叉樹,要求分層遍歷該二叉樹,即從上到下按層次訪問該樹,每一層單獨輸出一行,每一層要求訪問的順序為從左到右。我們在遍歷的過程中將該層節點的孩子節點壓入乙個佇列,這樣就可以實現從上到下一層一層地遍歷該二叉樹。層序遍歷 並分層列印 如果不用分層的話只用佇列...