您的位置:首页 > 其它

二叉排序树的创建,插入和 删除操作

2013-12-25 22:37 232 查看
/////////////////////////////////////////////////////////////////////////////////

//////////////二叉排序树的创建,插入和 删除操作
//////////////@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);

 }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐