1、概念
二叉排序樹(Binary Sort Tree):又稱二叉查找樹。 它或者是一棵空樹;或者是具有下列性質的二叉樹:
(1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;
(2)若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;
(3)左、右子樹也分別爲二叉排序樹;
2.二叉排序樹查找操作 code
/*二叉樹的二叉鏈表結點結構定義*/ typeof struct BiTNode /*結點結構*/ { int data; /*結點數據*/ starct BiTNode *lchild,*rchild; /*左右孩子指針*/ }BiTNode,*BiTree; /*遞歸查找二叉排序樹T中是否存在key*/ /*指針f指向T的雙親,其其初始調用值爲NULL*/ /*若查找成功,則指針p指向該數據元素結點,並返回TRUE*/ /*否則指針p指向查找路徑上訪問的最後一個結點並返回FALSE*/ Status SearchBST(BiTree T,int key,BiTree f,BiTree *p) { if(!T) /*查找不成功*/ { *p=f; return FALSE; } else if(key==T->data) /*查找成功*/ { *p=T; return TRUE; } else if(key<T->data) return SearchBST(T->lchild,key,T,p); /*在左子樹繼續查找*/ else return SearchBST(T->rchild,key,T,p); /*在右子樹繼續查找*/ }
3.二叉排序樹插入操作
(1)構造過程:
(2)code
/*當二叉排序樹T中不存在關鍵字等於key的數據元素時,插入key並返回TRUE,否則返回FALSE*/ Status InsertBST(BiTree *T,int key) { BiTree p,s; if(!SearchBST(*T,key,NULL,&p) /*查找不成功*/ { s=(BiTree)malloc(sizeof(BiTNode)); s->data=key; s->lchild=s->rchild=NULL; if(!p) *T=s; /*插入s爲新的根節點*/ else if(key<p->data) p->lchild=s; /*插入s爲左孩子*/ else p->rchild=s; /*插入s爲右孩子*/ return TRUE; } else return FALSE; /*樹種已有關鍵字相同的結點,不再插入*/ }