二叉排序树的创建,插入和 删除操作
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);
}
}
//////////////二叉排序树的创建,插入和 删除操作
//////////////@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);
}
}
相关文章推荐
- 二叉查找树(二叉排序树)创建,插入,删除操作。
- 二叉排序树的创建(结点的插入,删除等操作)
- 二叉查找树(二叉排序树)创建,插入,删除操作。
- 单链表的创建、插入、删除、倒置操作
- 常见的数据库操作:创建,查看,插入,删除,主键(mysql)
- 二叉排序树的插入、生成、删除及查找操作
- 单链表的创建、插入、删除、倒置操作
- 二叉排序树的查询、插入和删除操作
- 单链表的创建、插入删除等操作
- c++ 实现结构体单链表的 创建 插入 删除等操作
- 数据结构之 单链表的基本操作(创建、取值、插入、删除)
- 二叉排序树(BST)创建,删除,查找操作
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- javascript 原生方法对dom节点的操作,创建、添加、删除、替换、插入、复制、移动等操作
- (C语言版)链表(一)——实现单向链表创建、插入、删除等简单操作(包含个人理解说明及注释,新手跟着写代码)
- C语言单向链表的创建、释放、插入、删除、翻转操作练习
- (C语言版)链表(一)——实现单向链表创建、插入、删除等简单操作(包含个人理解说明及注释,新手跟着写代码)
- C语言链表的创建、插入、查找、删除、清空操作
- 循环链表 实现对循环链表的初始化,创建,插入,删除,输出操作
- 链表操作:创建,插入,删除,查找等功能