二叉排序樹相關操作(C C )

2021-09-27 13:53:18 字數 1758 閱讀 1355

目錄:

1、建立二叉樹(遞迴)

2、建立二叉樹(非遞迴)

3、前序遍歷(非遞迴)

4、中序遍歷(非遞迴)

5、後續遍歷(非遞迴)

//建立ordertree(bitree *&t,int data)

void

ordertree

(bitree *

&t,int data)

else

if(data>t-

>data)

else

if(data>data)

}int main (

)``

void

addnode

(binaryt *

&t,int val)

binaryt *pre=

null

,*s;

s=t;

while

(s)if

(s->data>val)

else}if

(pre-

>data>val)

else

return

;}

用棧實現,先把根節點入棧,進入while(棧不為空則繼續)迴圈

在迴圈內執行

如果(左子樹不為空)

}因為是用棧實現的非遞迴前序遍歷,所以先訪問棧頂元素,又由於棧是後進先出,所以先進右子樹,再進左子樹

typedef

struct nodebitree;

//||自定義棧

typedef

struct sqsqstack;

bool

stackempty

(sqstack *st)

//壓棧操作,傳入的兩個引數,乙個是用於接收根節點的位址bitree *,乙個是用於對原生的st進行指標賦值操作

bool

push

(sqstack *st,bitree *p)

st->top++

; st-

>ptree[st-

>top]

=p;return1;

}//出棧操作,乙個用於接收被pop的棧頂元素,因為這個元素必須要改變指標的值,而不是指標所指向記憶體的值,所以用*&.

bool

pop(sqstack *st,bitree *

&p) p=st-

>ptree[st-

>top]

; st-

>top--

;return1;

}void

preshow

(bitree *t)

//不為空,則先進棧根節點;棧的初始化

sqstack *st=

(sqstack *

)malloc

(sizeof

(sqstack));

st->top=-1

;push

(st,t)

;//棧不為空,則進入迴圈

while(!

stackempty

(st))if

(p->left!=

null)}

}

偽碼描述:

while(棧不為空 | | p!=null)

if(棧不空)

}偽碼描述:

dowhile(棧不空且結點p是棧頂)

else p=p->right;

}}while(棧不空)

c c 二叉排序樹

概念 左樹的所有節點的值 包括子節點 必須小於中心節點,右樹所有節點的值 包括子節點 必須大於中心節點。不允許有值相同的節點。二叉排序樹的特點 建立二叉排序樹的思路 二叉排序樹的一些實用函式 init bst 初始化二叉排序樹 insert bst tree 插入樹的節點 min求樹中最小節點 ma...

二叉排序樹的相關操作

二叉排序樹 定義 1 若它的左子樹非空,則左子樹的所有節點都小於它的根節點 2 若它的右子樹非空,則右子樹的所有節點都小於它的根節點 3 它的左右字數也分別為二叉排序樹。二叉排序樹的建立和插入節點 實現 int bst insert treenode root,int data else if da...

二叉排序樹及相關操作說明

在講到集合的時候,很容易讓人想到的是陣列和鍊錶。然後大家會討論這兩種資料結構的差異。但是根據指定的內容在集合中查詢,這兩種資料結構的效能卻沒有區別都是o n 如何提高在集合中檢索指定內容資料的效能,是我們在程式開發中面臨的問題。左子樹不空時,左子樹上所有的結點關鍵字的值均小於根結點關鍵字的值 右子樹...