目錄:
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 如何提高在集合中檢索指定內容資料的效能,是我們在程式開發中面臨的問題。左子樹不空時,左子樹上所有的結點關鍵字的值均小於根結點關鍵字的值 右子樹...