資料結構上機 判斷二叉排序樹

2021-10-11 05:40:04 字數 1321 閱讀 2447

//判斷二叉排序樹的程式**

#include

#include

#include

//二叉鍊錶的結構型別定義

const int maxsize=

1024

;typedef int keytype;

typedef struct node

bitree;

bitree*

creattree()

;void

preorder

(bitree*);

int inorder

(bitree*);

int main()

//二叉樹的建立

bitree*

creattree()

rear++;q

[rear]

=s;if

(rear==

1)root=s;

else

scanf

("%d"

,&x);}

return root;

}//二叉樹的輸出

void

preorder

(bitree*p)}}

//新增判斷二叉排序樹演算法

int inorder

(bitree*p)

; int i=0;

pre[i]

=p->key;

if(p==

null

)return1;

//由於虛結點存在,分情況討論

else

if(p-

>lchild==

null

&&p-

>rchild==

null

)return1;

//葉子結點

else

if(p-

>rchild==

null

&&p-

>lchild!=

null

)//只有左子樹

}else

if(p-

>lchild==

null

&&p-

>rchild!=

null

)//只有右字樹

}else

//左右子樹均存在

}}

此題難度較大

有兩個主要問題

1、虛結點的存在需要導致分類

2、一種特殊情況:p的左孩子的右孩子大於p,我的做法是通過乙個陣列來記錄祖先的數值,應該可以有更好的方法。

附:驗證資料 5 3 7 2 4 4 8-1

資料結構 二叉排序樹

二叉排序樹是一種特殊結構的二叉樹,它作為一種表的組織手段,通常被稱為 樹表。可以作為一種排序和檢索的手段。定義 二叉排序樹或是空樹,或是具有下述性質的二叉樹 其左子樹上所有結點的資料值均小於根結點的資料值 右子樹上所有結點的資料值均大於或等於根結點的資料值。左子樹和右子樹又各是一棵二叉排序樹。對二叉...

資料結構 二叉排序樹

二叉排序樹 binarysorttree 具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 3 左 右子樹也分別為二叉排序樹 include includeusing namespace std type...

資料結構 二叉排序樹

如果需要乙個滿足 支援排序性 高效插入 刪除操作 高效查詢的資料結構,怎麼做?先看看一些簡單的資料結構 1 排序順序表 陣列 查詢可以採用折半查詢演算法,時間效率為o log2n 插入 刪除操作的時間複雜度為o n 資料量大時,效率太低。2 排序單鏈表 只能採用順序查詢,時間複雜度為o n 不能採用...