什麼是二叉樹

2022-04-08 06:40:48 字數 5122 閱讀 4670

1樓:z王國平

二叉樹也是遞迴定義的,其結點有左右子樹之分,邏輯上二叉樹有五種基本形態:

(1)空二叉樹——(a);

(2)只有一個根結點的二叉樹——(b);

(3)右子樹為空的二叉樹——(c);

(4)左子樹為空的二叉樹——(d);

(5)完全二叉樹——(e)

注意:儘管二叉樹與樹有許多相似之處,但二叉樹不是樹的特殊情形。

參考

2樓:

二叉樹就是和兩個最多隻有兩個分叉的樹差不多,如:

a/ \

b c

就是一個二叉樹,

它又有滿二叉樹,完全二叉樹,空二叉樹,一般二叉樹。

如上圖就是滿二叉樹。若這個二叉樹的深度是n,那麼從第一層到n-1層的每一個節點都要有他的左節點和右節點(就是有兩個分叉),空二叉樹就是沒有節點;完全二叉樹:如a

/ \

b c

/ \ /

d e f

就是說最後一層可以允許有空缺,但必須是從右往左的連續空缺。所以象這棵樹沒有e,f兩個節點的或者沒有f都是完全二叉樹,但是沒有e卻有f就不是,

所以滿二叉樹就是完全二叉樹的特殊形式。

什麼是二叉樹?

3樓:匿名使用者

二叉樹在電腦科學中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆。

二叉樹的每個結點至多隻有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2^個結點;深度為k的二叉樹至多有2^k-1個結點;對任何一棵二叉樹t,如果其終端結點數為n_0,度為2的結點數為n_2,則n_0=n_2+1。

一棵深度為k,且有2^k-1個節點的二叉樹,稱為滿二叉樹。這種樹的特點是每一層上的節點數都是最大節點數。而在一棵二叉樹中,除最後一層外,若其餘層都是滿的,並且最後一層或者是滿的,或者是在右邊缺少連續若干節點,則此二叉樹為完全二叉樹。

具有n個節點的完全二叉樹的深度為log2n+1。深度為k的完全二叉樹,至少有2^(k-1)個節點,至多有2^k-1個節點。

一、定義

二叉樹在圖論中是這樣定義的:二叉樹是一個連通的無環圖,並且每一個頂點的度不大於3。有根二叉樹還要滿足根結點的度不大於2。

有了根結點之後,每個頂點定義了唯一的父結點,和最多2個子結點。然而,沒有足夠的資訊來區分左結點和右結點。如果不考慮連通性,允許圖中有多個連通分量,這樣的結構叫做森林。

二、基本概念

二叉樹是遞迴定義的,其結點有左右子樹之分,邏輯上二叉樹有五種基本形態:

(1)空二叉樹——如圖(a);

(2)只有一個根結點的二叉樹——如圖(b);

(3)只有左子樹——如圖(c);

(4)只有右子樹——如圖(d);

(5)完全二叉樹——如圖(e)。

注意:儘管二叉樹與樹有許多相似之處,但二叉樹不是樹的特殊情形。

三、相關術語

樹的結點:包含一個資料元素及若干指向子樹的分支;

孩子結點:結點的子樹的根稱為該結點的孩子;

雙親結點:b 結點是a 結點的孩子,則a結點是b 結點的雙親;

兄弟結點:同一雙親的孩子結點; 堂兄結點:同一層上結點;

祖先結點: 從根到該結點的所經分支上的所有結點子孫結點:以某結點為根的子樹中任一結點都稱為該結點的子孫

結點層:根結點的層定義為1;根的孩子為第二層結點,依此類推;

樹的深度:樹中最大的結點層

結點的度:結點子樹的個數

樹的度: 樹中最大的結點度。

葉子結點:也叫終端結點,是度為 0 的結點;

分枝結點:度不為0的結點;

有序樹:子樹有序的樹,如:家族樹;

無序樹:不考慮子樹的順序;[3]

四、二叉樹性質

(3) 對於任意一棵二叉樹,如果其葉結點數為n0,而度數為2的結點總數為n2,則n0=n2+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,則無右兒子。

(6)給定n個節點,能構成h(n)種不同的二叉樹。

h(n)為卡特蘭數的第n項。h(n)=c(2*n,n)/(n+1)。

(7)設有i個枝點,i為所有枝點的道路長度總和,j為葉的道路長度總和j=i+2i[4]

五、儲存結構

(1)順序儲存方式

1  typenode=record

2  data:datatype

3  l,r:integer;

4  end;

5  vartr:array[1..n]ofnode;

(2)連結串列儲存方式,如:

1  typebtree=^node;

2  node=record

3  data:datatye;

4  lchild,rchild:btree;

5  end;

六、辨析

二叉樹不是樹的一種特殊情形,儘管其與樹有許多相似之處,但樹和二叉樹有兩個主要差別:

1. 樹中結點的最大度數沒有限制,而二叉樹結點的最大度數為2;

2. 樹的結點無左、右之分,而二叉樹的結點有左、右之分。

七、遍歷順序

遍歷是對樹的一種最基本的運算,所謂遍歷二叉樹,就是按一定的規則和順序走遍二叉樹的所有結點,使每一個結點都被訪問一次,而且只被訪問一次。由於二叉樹是非線性結構,因此,樹的遍歷實質上是將二叉樹的各個結點轉換成為一個線性序列來表示。

設l、d、r分別表示遍歷左子樹、訪問根結點和遍歷右子樹, 則對一棵二叉樹的遍歷有三種情況:dlr(稱為先根次序遍歷),ldr(稱為中根次序遍歷),lrd (稱為後根次序遍歷)。

先序遍歷

首先訪問根,再先序遍歷左(右)子樹,最後先序遍歷右(左)子樹,c語言**如下:

1  voidxxbl(tree*root)

中序遍歷

首先中序遍歷左(右)子樹,再訪問根,最後中序遍歷右(左)子樹,c語言**如下

1  voidzxbl(tree*root)

2  後序遍歷

首先後序遍歷左(右)子樹,再後序遍歷右(左)子樹,最後訪問根,c語言**如下

1  voidhxbl(tree*root)

層次遍歷

即按照層次訪問,通常用佇列來做。訪問根,訪問子女,再訪問子女的子女(越往後的層次越低)(兩個子女的級別相同)

線索二叉樹

線索二叉樹(保留遍歷時結點在任一序列的前驅和後繼的資訊):若結點有左子樹,則其lchild域指示其左孩子,否則令lchild域指示其前驅;若結點有右子樹,則其rchild域指示其右孩子,否則令rchild指示其後繼。還需在結點結構中增加兩個標誌域ltag和rtag。

ltag=0時,lchild域指示結點的左孩子,ltag=1時,lchild域指示結點的前驅;rtag=0時,rchild域指示結點的右孩子,rtag=1時,rchild域指示結點的後繼。以這種結點結構構成的二叉線索連結串列,連結串列作為二叉樹的儲存結構,叫做其中指向結點前驅和後繼的指標叫做線索,加上線索的二叉樹稱為線索二叉樹。對二叉樹以某種次序遍歷使其變為線索二叉樹的過程叫做線索化。

若對二叉樹進行中序遍歷,則所得的線索二叉樹稱為中序線索二叉樹,線索連結串列稱為為中序線索連結串列。線索二叉樹是一種物理結構。

在中序線索樹找結點後繼的規律是:若其右標誌為1,則右鏈為線索,指示其後繼,否則遍歷其右子樹時訪問的第一個結點(右子樹最左下的結點)為其後繼;找結點前驅的規律是:若其左標誌為1,則左鏈為線索,指示其前驅,否則遍歷左子樹時最後訪問的一個結點(左子樹中最右下的結點)為其前驅。

在後序線索樹中找到結點的後繼分三種情況:

若結點是二叉樹的根,則其後繼為空;若結點是其雙親的右孩子,或是其雙親的左孩子且其雙親沒有右子樹,則其後繼即為雙親結點;若結點是其雙親的左孩子,且其雙親有右子樹,則其後繼為雙親右子樹上按後序遍歷列出的第一個結點。

資料結構定義為:

/*二叉線索儲存表示*/typedefenumpointertag;/* link(0):指標,thread(1):線索*/typedefstruct bithrnodebithrnode,*bithrtree;

八、實現演示

範例二叉樹:

ab c

d e此樹的順序結構為:abcd##e

int main()

什麼是二叉樹?

4樓:薄荷

在電腦科學中,二叉樹(英語:binary tree)是每個節點最多隻有兩個分支(即版不存在分支度大於2的節點)的權樹結構。通常分支被稱作「左子樹」或「右子樹」。

二叉樹的分支具有左右次序,不能隨意顛倒。

拓展資料:與普通樹不同,普通樹的節點個數至少為1,而二叉樹的節點個數可以為0;普通樹節點的最大分支度沒有限制,而二叉樹節點的最大分支度為2;普通樹的節點無左、右次序之分,而二叉樹的節點有左、右次序之分。

二叉樹通常作為資料結構應用,典型用法是對節點定義一個標記函式,將一些值與每個節點相關係。這樣標記的二叉樹就可以實現二叉搜尋樹和二叉堆,並應用於高效率的搜尋和排序。

5樓:思黎楊楷

有且只有兩個孩子樹的,稱為二叉樹~~~

6樓:羊福偶淑

1.樹的

度——bai也即是寬度,簡單地說du,就是結點zhi的分支數。以組成該dao樹各結點版中最大的度作為該樹權的度,如上圖的樹,其度為3;樹中度為零的結點稱為葉結點或終端結點。樹中度不為零的結點稱為分枝結點或非終端結點。

除根結點外的分枝結點統稱為內部結點。

1.樹中結點的最大度數沒有限制,而二叉樹結點的最大度數為2;

2.樹的結點無左、右之分,而二叉樹的結點有左、右之分。……二叉樹也是遞迴定義的,其結點有左右子樹之分,邏輯上二叉樹有五種基本形態:

(1)空二叉樹——(a);

(2)只有一個根結點的二叉樹——(b);

(3)只有左子樹——(c);

(4)只有右子樹——(d);

(5)完全二叉樹——(e)

C語言二叉樹遞迴演算法怎麼做?什麼是二叉樹的遞迴?

include include struct treenode typedef treenode bitree void visit treenode node 結點總數。int node bitree t return node t left node t right 1 前序。void preo...

構建平衡二叉樹,為什麼要構建平衡二叉樹,的主要目的為

首先按照這個順copy序27,16,73,35,42輸入,得到如下二叉排序樹 2716 73 3542 不平衡最小子樹的根節點是73 所以要旋轉以73為根結點的子樹使得整棵樹平衡觀察這棵子樹可知 這是一個lr型的子樹 需要對其進行兩次旋轉先l軟後r l旋轉得到 7342 35r旋轉得到 4235 7...

資料結構二叉樹怎麼遍歷啊,資料結構二叉樹已知中序遍歷,後序遍歷,求先序遍歷???

拿先序遍歷舉例 先序遍歷 是根左 右先遍歷根a,然後遍歷a的左子樹 是版左面那一群 然後遍歷a的右子權樹 為空 在a的左子樹中,先遍歷根也就是b,在遍歷b的左子樹也就是c,在遍歷b的右子樹,是右邊的一群。在b的右子樹中繼續 資料結構二叉樹已知中序遍歷,後序遍歷,求先序遍歷?通過分段來解決,找到根節點...