/
//二叉排序树的创建,插入和 删除操作
//@20131225
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTree
{
int data;
struct BiTree *LTree;
struct BiTree *RTree;
}BITREE,*BSTree;
BITREE* zhong(BITREE *pHead);//中序遍历
BITREE* createBiTree(BSTree &pHead,int *arrays,int nLength);
void insertValue(BSTree &pHead,int elem);
void myPrint(BITREE *pHead);
int main(void)
{
int> BSTree pHead = NULL;
pHead = createBiTree(pHead,data,10);
myPrint(pHead);
return 0;
}
/
//二叉排序树的删除操作
BSTree> //如果树空,直接返回
if(!temp)
{
return NULL;
}
//如果没找到要找的结点,直接返回,
while(temp)
{
if(deleElem == temp ->data)break;
parent = temp;
if(deleElem <> }
else
{
temp => {
parent ->RTree = NULL;
}
else
{
parent ->LTree = NULL;
}
free(temp);
}
// 如果只有左孩子,或者只有右孩子,将它的左孩子或者右孩子代替被删除的结点
else> {
parent ->RTree => }
free(temp);
temp ->LTree => }
else> {
parent ->RTree => }
free(temp);
temp ->LTree => }
// 如果左右孩子都有,则在p 的左子树上找中序遍历的最后一个节点,用最后一个节点值代替被删除的节点值,然后
// 从左子树中删除这个节点
else//左右孩子都有
{
BITREE *replace => {
parent ->RTree => }
replace ->LTree => free(temp);
}
}
/
//二叉排序树的插入操作
void> temp ->data = elem;
temp ->LTree = NULL;
temp ->RTree =NULL;
pHead = temp;
}
else if(elem < pHead ->data)
{
insertValue(pHead ->LTree,elem);
}
else if(elem > pHead ->data)
{
insertValue(pHead ->RTree, elem);
}
}
/
/利用插入算法,从没有结点开始创建一颗二叉排序树,它的元素值是循环的递增序列
也可以定义一个数组,将数组的值分别赋给树中的结点
BITREE* createBiTree(BSTree &pHead,int *arrays,int nLength)
{
/*for(int j = 0;j<10;j++)
{
insertValue(pHead,j);
}*/
for(int> {
insertValue(pHead,arrays[i]);
}
return> if(pHead)
{
zhong(pHead ->LTree);
printf("%d ",pHead ->data);
ptemp ->data = pHead ->data;
zhong(pHead ->RTree);
}
return ptemp;
}
void myPrint(BITREE *pHead)
{
if(pHead)
{
myPrint(pHead ->LTree);
printf("%d",pHead ->data);
myPrint(pHead ->RTree);
}
}