資料結構 六 樹和二叉樹

2021-10-23 17:30:24 字數 2434 閱讀 6570

樹是一種有層次的資料集合,資料之間的關係是非線性。

特點是:除了根節點外其他結點都有唯一前驅,所有結點都有零個或者多個後驅。

二叉樹:

每個結點至多有兩棵子樹。

儲存方式:

順序儲存結構:

typedef

int datatype;

const

int maxsize=

1000

;//指路建立法

struct bittree

//false插入失敗,true插入成功

bool

inserttree

(char str[

],datatype newone)

for(

int i=

0;i(str[i]

=='r')}

data[root]

=newone;

return

true;}

//先序遍歷

void

preorder

(int root)

//中序遍歷

void

inorder

(int root)

//後序遍歷

void

postorder

(int root)

};

鏈式儲存結構:

typedef

int datatype;

struct nodes

;struct bittree

//插入二叉樹

bool

inserttree

(char str[

],datatype newone)

nodes *temp=head;

for(

int i=

0;i1;i++)if

(str[i]

=='r')}

nodes* ano=

(nodes*

)malloc

(sizeof

(nodes));

ano-

>data=newone;

ano-

>left=

null

; ano-

>right=

null;if

(str[l-1]

=='l'

)temp-

>left=ano;

if(str[l-1]

=='r'

)temp-

>right=ano;

return

true;}

//先序遍歷

void

preorder

(nodes* temp)

//非遞迴的先序遍歷

//輸出當前結點,將當前結點放入棧中

//當左子樹為空時,輸出棧頂結點地右子樹

void

preorder2

(nodes* temp)

else}}

}//中序遍歷

void

inorder

(nodes* temp)

//非遞迴地中序遍歷

//先進左子樹,輸出左子樹,將當前結點放入棧中

//當左子樹為空時,輸出棧頂結點,並進入其右子樹

void

inorder2

(nodes* temp)

else}}

}//後序遍歷

void

postorder

(nodes* temp)

//非遞迴後序遍歷

//記錄訪問過的結點

void

postorder2

(nodes* temp)

else

else}}

}//層次遍歷

void

levelorder

(nodes* temp)}}

;

二叉樹的遍歷:

先序(前序)遍歷:根----左-----右

中序遍歷:左----根-----右

後序遍歷:左----右-----根

這三種可以使用遞迴實現,也可採用非遞迴實現。實現見上面**。採用非遞迴實現時,要使用棧,其中後序遍歷最難,當在右子樹為空或者右子樹遍歷完時,才能訪問(列印)結點,右子樹遍歷完需要用標記標誌。

層次遍歷:按層遍歷

層次遍歷需要借助佇列

這棵二叉樹的先序遍歷是:f-c-a-d-b-e-h-g-m

中序遍歷是:a-c-b-d-f-h-e-m-g

後序遍歷是:a-b-d-c-h-m-g-e-f

層次遍歷:f-c-e-a-d-h-g-b-m

資料結構 (六) 樹和二叉樹

這一章真滴是超級超級的難,本來遞迴就不會,現在又把指標和遞迴搞在一起,太難為人了,特別是二叉樹那個地方,前序中序後序層序,非遞迴的方法實在是令人費解。因此我的部落格也只是羅列了一些主要的知識點,具體的知識還是要看課本的。樹的遍歷 樹的前序遍歷操作定義為 若樹為空,不進行遍歷 否則 訪問根結點 按照從...

資料結構 樹和二叉樹

第一節 二叉樹的定義與基本操作 定義 我們把滿足以下兩個條件的樹型結構叫做二叉樹 binary tree 1 每個結點的度都不大於2 2 每個結點的孩子結點次序不能任意顛倒。由定義得出 二叉樹的每個結點只能含有0 1或2個孩子,且有左右之分。1 二叉樹的五種基本形態 2 二叉樹性質 性質1 二叉樹第...

資料結構 樹和二叉樹

定義 二叉樹是n n 0 個節點的有限集合,該集合或者為空集 稱為空二叉樹 或者由乙個根節點和兩棵互不相交的 分別稱為根節點的左子樹和右子樹的二叉樹組成。特點 每個節點最多有兩棵子樹 二叉樹是有序的,其次序不能任意顛倒 斜樹 1.所有節點都只有左子樹的二叉樹稱為左斜樹 2.所有節點都只有右子樹的二叉...