C 資料結構二叉樹的特點以及儲存實現

2021-10-25 18:02:29 字數 3296 閱讀 3232

二叉樹是n個有限元素的集合,該集合為空或者由乙個稱為根的元素以及兩個不相交的左子樹和右子樹的二叉樹組成;當集合為空是稱為空二叉樹。在二叉樹中,乙個元素也稱為乙個結點

1.結點的度:結點所擁有的子樹個數稱為度。即該結點下方所連線的子結點個數。上圖結點e的度為2,f的度為1,h的度為0。

2.葉結點:度為0的結點稱為葉結點;也稱為末端結點。h、d、g、i都是末端結點。

3.分支結點:度不為0的結點稱為分支結點;也稱為為末端結點。一棵樹的結點除了葉結點外,其他都是分支結點。

4.孩子結點、兄弟結點、父結點:樹中乙個結點的子樹的根結點稱為這個結點的孩子。這個結點稱為它孩子結點的父結點。具有同乙個父結點稱為兄弟結點。上圖中e是g和h的父結點;g稱為e的孩子結點;g、h兩者稱為兄弟結點。

5.路徑、路徑長度:樹的訪問只能按照順序訪問。父結點只能訪問它的子結點,不可越級訪問。從某一結點到另一結點的路稱為路徑。如上圖從根結點a開始到g的路徑為aceg。這個路徑的路徑長度為3。從a到d的路徑為abd,路徑長度為2。

6.結點的層數:從根結點開始定義。根結點的層數為1.根結點的子結點層數加一,以此類推。樹中所有結點的最大層數為該樹的深度。上圖的樹的深度為4。

7.樹的度:樹中各結點度的最大值為該樹的度。二叉樹的度為2。

8.完全二叉樹:除了最後一層都是滿的(即左右孩子結點都不為空),最後一層從左至右連續稱為完全二叉樹。下圖就是乙個完全二叉樹。

9.滿二叉樹:除最後一層以外所有結點的左右孩子結點都不為空。所有的滿二叉樹都是完全二叉樹。但是完全二叉樹不一定是滿二叉樹。如下圖

1.乙個非空二叉樹的第i層上最多右2^(i-1)個結點。

2.一棵深度為k的二叉樹中,最多具有2^k - 1個結點。

3.對於乙個非空的二叉樹。如果葉子節點樹為m,度數為2的結點數為n,則有m = n+1。

4.具有n個結點的完全二叉樹的深度k為【log 2 n】 +1。

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace tree

public

node

(t data, node leftchild)

public

node

(node leftchild, node rightchild)

public

node

(t data)

public

node()

public

t data

set}

public node leftchild

set}

public node rightchild

set}

#endregion}}

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

namespace tree

set}

public

linkbitree()

public

linkbitree

(t data)

public

linkbitree

(t data,node leftchild =

null

,node rightchild =

null

)//判斷樹是否為空

public

bool

isempty()

return

false;}

//獲取根節點

public node

root()

//獲取結點的左孩子結點

public node

leftchild

(node p)

//獲取結點的右孩子結點

public node

rightchild

(node p)

//將結點p的左子樹插入值為data的新結點

//原來的左子樹成為新結點的左子樹

public

void

insertleft

(t data,node p)

//將結點p的右子樹插入值為data的新結點

//原來的右子樹成為新結點的右子樹

public

void

insertright

(t data, node p)

//刪除p的左子樹

public node

delleft

(node p)

else

}//刪除p的右子樹

public node

delright

(node p)

else

}//查詢某個值為value的結點

public node

search

(node root,

tvalue)if

(!p.data.

equals

(value))

if(p.leftchild !=

null)if

(p.rightchild !=

null

)return

null;}

//判斷是否是葉子結點

public

bool

isleaf

(node p)

return

false;}

}}

資料結構(二叉樹) 二叉樹的建立 儲存 遍歷

建立二叉樹,並通過呼叫函式,輸出先序遍歷 中序遍歷與後序遍歷的結果 include include define true 1 define false 0 define ok 1 define error 0 datatype 是二叉樹資料元素型別,此程式定義為char型 typedef char...

資料結構 順序儲存二叉樹

include iostream using namespace std define max node size 100 二叉樹的最大節點數 typedef char sqbitree max node size 1 0號單元節點個數 建立二叉樹 void creat tree sqbitree ...

C 資料結構(樹 二叉樹)

樹的定義 樹是你 n 0 個節點的有限集t t為空是空樹 非空樹具有兩個條件。有且僅有乙個根節點作為樹根 其餘節點可分為m個互不相交的子集t1,tm。其中每乙個子集本手又是一顆樹,稱其為跟節點的子樹。遞迴思想 樹的二元組表示 t d,r d 樹t中的節點集合,r 樹中的節點關係。二元組另外一種表示 ...