二叉排序樹(也稱二叉查詢樹),或者是一棵空的二叉樹,或者是具有下列性質的二叉樹:
⑴ 若它的左子樹不空,則左子樹上所有結點的值均小於根結點的值;
⑵ 若它的右子樹不空,則右子樹上所有結點的值均大於根結點的值;
⑶ 它的左右子樹也都是二叉排序樹。
中序遍歷二叉排序樹可以得到乙個按關鍵碼的有序數列。
脫胎於二叉樹,區別是每個節點資料要進行比對,再進行插入,小插左,大插右,直接上**,清楚明白。
#include.h>
using namespace std;
#define n
100typedef struct bitnode
bitnode,
*bitree;
bitree root=
null
;int n,k[n]
;void
inorder
(bitree t
)//中序遍歷
}void
insert
(int m)
else
elseif(
(m>p1-
>data)
&&(p1-
>rchild!=
null))
elseif(
(m>data)
&&(p1-
>lchild==
null))
elseif(
(m>p1-
>data)
&&(p1-
>rchild==
null))
}}}void
create()
for(int i=
0; iint main()
判斷一棵二叉樹是否是二叉排序樹
判斷一棵二叉樹是否是二叉排序樹,可以通過中序遍歷來檢查,為此要設定乙個指標pr指示二叉樹中當前結點的中序直接前驅,每訪問乙個結點,就比較當前訪問結點的關鍵值是否大於ptr所指結點的關鍵字值,如果遍歷了所有結,各結點與其中序直接前驅點都 是後乙個大於前乙個,則為二叉排序樹。void binsearch...
判斷一棵樹是否為二叉排序樹
由於二叉排序樹的中序遍歷時得到的一定是個乙個公升序序列,我們可以根據這一性質,利用中序遍歷進行判定。1 設定全域性變數max為無窮小。2 若樹為空,則返回true。3 否則遞迴判斷左子樹是否為二叉排序樹,並用flag1儲存結果。3 若flag1為假或者根節點關鍵字小於等於左子樹的關鍵字,則返回fal...
建立一棵二叉樹 輸出前序
洛谷 p1305 輸入一串二叉樹,用遍歷前序打出。第一行為二叉樹的節點數n。n leq 26n 26 後面n行,每乙個字母為節點,後兩個字母分別為其左右兒子。空節點用 表示 6abc bdicj d i j 輸出 abdicj 思路 建立乙個節點包含父節點 左兒子 右兒子 的節點 有父節點可以判斷誰...