1樓:匿名使用者
二叉樹樹是一種重要的非線性資料結構,直觀地看,它是資料元素(在樹中稱為結點)按分支關係組織起來的結構,很象自然界中的樹那樣。樹結構在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構都可用樹形象表示。樹在計算機領域中也得到廣泛應用,如在編譯源程式如下時,可用樹表示源源程式如下的語法結構。
又如在資料庫系統中,樹型結構也是資訊的重要組織形式之一。一切具有層次關係的問題都可用樹來描述。
一、樹的概述
樹結構的特點是:它的每一個結點都可以有不止一個直接後繼,除根結點外的所有結點都有且只有一個直接前趨。以下具體地給出樹的定義及樹的資料結構表示。
(一)樹的定義
樹是由一個或多個結點組成的有限集合,其中:
⒈必有一個特定的稱為根(root)的結點;
⒉剩下的結點被分成n>=0個互不相交的集合t1、t2、......tn,而且, 這些集合的每一個又都是樹。樹t1、t2、......tn被稱作根的子樹(subtree)。
樹的遞迴定義如下:(1)至少有一個結點(稱為根)(2)其它是互不相交的子樹
1.樹的度——也即是寬度,簡單地說,就是結點的分支數。以組成該樹各結點中最大的度作為該樹的度,如上圖的樹,其度為3;樹中度為零的結點稱為葉結點或終端結點。
樹中度不為零的結點稱為分枝結點或非終端結點。除根結點外的分枝結點統稱為內部結點。
2.樹的深度——組成該樹各結點的最大層次,如上圖,其深度為4;
3.森林——指若干棵互不相交的樹的集合,如上圖,去掉根結點a,其原來的二棵子樹t1、t2、t3的集合就為森林;
4.有序樹——指樹中同層結點從左到右有次序排列,它們之間的次序不能互換,這樣的樹稱為有序樹,否則稱為無序樹。
5.樹的表示
樹的表示方法有許多,常用的方法是用括號:先將根結點放入一對圓括號中,然後把它的子樹由左至右的順序放入括號中,而對子樹也採用同樣的方法處理;同層子樹與它的根結點用圓括號括起來,同層子樹之間用逗號隔開,最後用閉括號括起來。如上圖可寫成如下形式:
(a(b(e(k,l),f),c(g),d(h(m),i,j)))
5. 2 二叉樹
1.二叉樹的基本形態:
二叉樹也是遞迴定義的,其結點有左右子樹之分,邏輯上二叉樹有五種基本形態:
(1)空二叉樹——(a);
(2)只有一個根結點的二叉樹——(b);
(3)右子樹為空的二叉樹——(c);
(4)左子樹為空的二叉樹——(d);
(5)完全二叉樹——(e)
注意:儘管二叉樹與樹有許多相似之處,但二叉樹不是樹的特殊情形。
2.兩個重要的概念:
(1)完全二叉樹——只有最下面的兩層結點度小於2,並且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹;
(2)滿二叉樹——除了葉結點外每一個結點都有左右子女且葉結點都處在最底層的二叉樹,。
3.二叉樹的性質
(1) 在二叉樹中,第i層的結點總數不超過2^(i-1);
(2) 深度為h的二叉樹最多有2h-1個結點(h>=1),最少有h個結點;
(3) 對於任意一棵二叉樹,如果其葉結點數為n0,而度數為2的結點總數為n2,
則n0=n2+1;
(4) 具有n個結點的完全二叉樹的深度為int(log2n)+1
(5)有n個結點的完全二叉樹各結點如果用順序方式儲存,則結點之間有如下關係:
若i為結點編號則 如果i<>1,則其父結點的編號為i/2;
如果2*i<=n,則其左兒子(即左子樹的根結點)的編號為2*i;若2*i>n,則無左兒子;
如果2*i+1<=n,則其右兒子的結點編號為2*i+1;若2*i+1>n,則無右兒子。
4.二叉樹的儲存結構:
(1)順序儲存方式
type node=record
data:datatype
l,r:integer;
end;
var tr:array[1..n] of node;
(2)連結串列儲存方式,如:
type btree=^node;
node=record
data:datatye;
lchild,rchild:btree;
end;
5.普通樹轉換成二叉樹:凡是兄弟就用線連起來,然後去掉父親到兒子的連線,只留下父母到其第一個子女的連線。
二叉樹很象一株倒懸著的樹,從樹根到大分枝、小分枝、直到葉子把資料聯絡起來,這種資料結構就叫做樹結構,簡稱樹。樹中每個分叉點稱為結點,起始結點稱為樹根,任意兩個結點間的連線關係稱為樹枝,結點下面不再有分枝稱為樹葉。結點的前趨結點稱為該結點的"雙親",結點的後趨結點稱為該結點的"子女"或"孩子",同一結點的"子女"之間互稱"兄弟"。
二、二叉樹:二叉樹是一種十分重要的樹型結構。它的特點是,樹中的每個結點最多隻有兩棵子樹,即樹中任何結點的度數不得大於2。
二叉樹的子樹有左右之分,而且,子樹的左右次序是重要的,即使在只有一棵子樹的情況下,也應分清是左子樹還是右子樹。定義:二叉樹是結點的有限集合,這個集合或是空的,或是由一個根結點和兩棵互不相交的稱之為左子樹和右子樹的二叉樹組成。
(三)完全二叉樹
對滿二叉樹,從第一層的結點(即根)開始,由下而上,由左及右,按順序結點編號,便得到滿二叉樹的一個順序表示。據此編號,完全二叉樹定義如下:一棵具有n個結點,深度為k的二叉樹,當且僅當所有結點對應於深度為k的滿二叉樹中編號由1至n的那些結點時,該二叉樹便是完全二叉樹。
圖4是一棵完全二叉樹。
三、二叉樹的遍歷
遍歷是對樹的一種最基本的運算,所謂遍歷二叉樹,就是按一定的規則和順序走遍二叉樹的所有結點,使每一個結點都被訪問一次,而且只被訪問一次。由於二叉樹是非線性結構,因此,樹的遍歷實質上是將二叉樹的各個結點轉換成為一個線性序列來表示。
設l、d、r分別表示遍歷左子樹、訪問根結點和遍歷右子樹, 則對一棵二叉樹的遍歷有三種情況:dlr(稱為先根次序遍歷),ldr(稱為中根次序遍歷),lrd (稱為後根次序遍歷)。
(1)先序遍歷
訪問根;按先序遍歷左子樹;按先序遍歷右子樹
(2)中序遍歷
按中序遍歷左子樹;訪問根;按中序遍歷右子樹
(3)後序遍歷
按後序遍歷左子樹;按後序遍歷右子樹;訪問根
2樓:匿名使用者
就是每個結點最多隻有2個孩子.
什麼是二叉樹,舉一個二叉樹的例子
3樓:南京長江醫院
樹是一種重要的非線性資料結構,直觀地看,它是資料元素(在樹中稱為結點)按分支關係組織起來的結構,很象自然界中的樹那樣。樹結構在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構都可用樹形象表示。樹在計算機領域中也得到廣泛應用,如在編譯源程式如下時,可用樹表示源源程式如下的語法結構。
又如在資料庫系統中,樹型結構也是資訊的重要組織形式之一。一切具有層次關係的問題都可用樹來描述。樹結構的特點是:
它的每一個結點都可以有不止一個直接後繼,除根結點外的所有結點都有且只有一個直接前趨。以下具體地給出樹的定義及樹的資料結構表示。樹是由一個或多個結點組成的有限集合,其中:
⒉剩下的結點被分成n>=0個互不相交的集合t1、t2、......tn,而且, 這些集合的每一個又都是樹。樹t1、t2、......
tn被稱作根的子樹(subtree)。1.樹的度——也即是寬度,簡單地說,就是結點的分支數。
以組成該樹各結點中最大的度作為該樹的度,如上圖的樹,其度為3;樹中度為零的結點稱為葉結點或終端結點。樹中度不為零的結點稱為分枝結點或非終端結點。除根結點外的分枝結點統稱為內部結點。
2.樹的深度——組成該樹各結點的最大層次,如上圖,其深度為4;3.森林——指若干棵互不相交的樹的集合,如上圖,去掉根結點a,其原來的二棵子樹t1、t2、t3的集合就為森林;4.
有序樹——指樹中同層結點從左到右有次序排列,它們之間的次序不能互換,這樣的樹稱為有序樹,否則稱為無序樹。樹的表示方法有許多,常用的方法是用括號:先將根結點放入一對圓括號中,然後把它的子樹由左至右的順序放入括號中,而對子樹也採用同樣的方法處理;同層子樹與它的根結點用圓括號括起來,同層子樹之間用逗號隔開,最後用閉括號括起來。
如上圖可寫成如下形式:二叉樹也是遞迴定義的,其結點有左右子樹之分,邏輯上二叉樹有五種基本形態:注意:
儘管二叉樹與樹有許多相似之處,但二叉樹不是樹的特殊情形。(1)完全二叉樹——只有最下面的兩層結點度小於2,並且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹;(2)滿二叉樹——除了葉結點外每一個結點都有左右子女且葉結點都處在最底層的二叉樹,。(1) 在二叉樹中,第i層的結點總數不超過2^(i-1);(2) 深度為h的二叉樹最多有2h-1個結點(h>=1),最少有h個結點;(3) 對於任意一棵二叉樹,如果其葉結點數為n0,而度數為2的結點總數為n2,(5)有n個結點的完全二叉樹各結點如果用順序方式儲存,則結點之間有如下關係:
若i為結點編號則 如果i<>1,則其父結點的編號為i/2;如果2*i<=n,則其左兒子(即左子樹的根結點)的編號為2*i;若2*i>n,則無左兒子;如果2*i+1<=n,則其右兒子的結點編號為2*i+1;若2*i+1>n,則無右兒子。(2)連結串列儲存方式,如:5.
普通樹轉換成二叉樹:凡是兄弟就用線連起來,然後去掉父親到兒子的連線,只留下父母到其第一個子女的連線。二叉樹很象一株倒懸著的樹,從樹根到大分枝、小分枝、直到葉子把資料聯絡起來,這種資料結構就叫做樹結構,簡稱樹。
樹中每個分叉點稱為結點,起始結點稱為樹根,任意兩個結點間的連線關係稱為樹枝,結點下面不再有分枝稱為樹葉。結點的前趨結點稱為該結點的"雙親",結點的後趨結點稱為該結點的"子女"或"孩子",同一結點的"子女"之間互稱"兄弟"。
二、二叉樹:二叉樹是一種十分重要的樹型結構。它的特點是,樹中的每個結點最多隻有兩棵子樹,即樹中任何結點的度數不得大於2。
二叉樹的子樹有左右之分,而且,子樹的左右次序是重要的,即使在只有一棵子樹的情況下,也應分清是左子樹還是右子樹。定義:二叉樹是結點的有限集合,這個集合或是空的,或是由一個根結點和兩棵互不相交的稱之為左子樹和右子樹的二叉樹組成。
對滿二叉樹,從第一層的結點(即根)開始,由下而上,由左及右,按順序結點編號,便得到滿二叉樹的一個順序表示。據此編號,完全二叉樹定義如下:一棵具有n個結點,深度為k的二叉樹,當且僅當所有結點對應於深度為k的滿二叉樹中編號由1至n的那些結點時,該二叉樹便是完全二叉樹。
圖4是一棵完全二叉樹。遍歷是對樹的一種最基本的運算,所謂遍歷二叉樹,就是按一定的規則和順序走遍二叉樹的所有結點,使每一個結點都被訪問一次,而且只被訪問一次。由於二叉樹是非線性結構,因此,樹的遍歷實質上是將二叉樹的各個結點轉換成為一個線性序列來表示。
設l、d、r分別表示遍歷左子樹、訪問根結點和遍歷右子樹, 則對一棵二叉樹的遍歷有三種情況:dlr(稱為先根次序遍歷),ldr(稱為中根次序遍歷),lrd (稱為後根次序遍歷)。
關於二叉樹,高分!二叉樹!!!
這些函式都挺好編的,只是在建立的時候我是用先序遞迴建的樹,不知道可不可以。二叉樹!二叉樹是否這樣的,如果是,那答案沒問題的,不然傳一張圖上來 二叉樹問題 先解釋為什麼d對,因為二叉樹的二叉鍊表儲存時,鍊表中的每個結點包含兩個指標,分別指向結點的左孩子和右孩子。而樹的鍊表儲存時,鍊表中的結點的兩個指標...
r語言如何二叉樹,如何構建二叉樹
define telemtype inttypedef struct bitnodebitnode,bitree 先序建立二叉樹 void createbitree bitree t t data c createbitree t lchild createbitree t rchild 先序遞迴建...
二叉樹的對稱序列是什麼,已知二叉樹的前序序列,對稱序列怎麼求後序序列
就是中序,先訪問左子樹,後訪問父節點,最後訪問右子樹。 這個對稱序列應該就是中序遍歷的序列了 已知二叉樹的前序序列,對稱序列怎麼求後序序列 利平凡 第一步,root最簡單,前序遍歷的第一節點g就是root。第二步,繼續觀察前序遍歷gdafemhz,除了知道g是root,剩下的節點必然是root的左右...