您的位置:首页 > 其它

二叉树的基本运算

2015-07-30 10:43 260 查看
#include <iostream>
#include <cstdlib>
using namespace std;
#define datatype char
typedef struct node
{
datatype data;
struct node *lchild;
struct node *rchild;
}*bitree,binode;                        /*二叉树*/
void initbitree(bitree *T)
{
*T=NULL;
}
void destroybitree(bitree *T)                /*二维指针*/
{
if(*T)                        /*如果是非空二叉树*/
{
if((*T)->lchild)
destroybitree(&((*T)->lchild));
if((*T)->rchild)
destroybitree(&((*T)->rchild));
free(*T);
*T=NULL;
}
}
void creatbitree(bitree *T)
{
datatype ch;                    /*递归创建二叉树*/
cin>>ch;
if(ch=='#')                        /*表示该处不生成结点*/
*T=NULL;
else
{
*T=new binode;
if(!(*T))
exit(-1);
(*T)->data=ch;
creatbitree(&((*T)->lchild));        /*构造左子树*/
creatbitree(&((*T)->rchild));        /*构造右子树*/
}
}
int insertleftchild(bitree p,bitree c)        /*二叉树的左插入*/
{
if(p)
{
c->rchild=p->lchild;    /*将c子树插入到T中,使得c成为p的做子树*/
p->lchild=c;        /*p的左子树成为c的右子树*/
return 1;
}
return 0;
}
int insertrightchild(bitree p,bitree c)        /*二叉树的右插入*/
{
if(p)
{
c->rchild=c->lchild;
p->rchild=c;
return 1;
}
return 0;
}
bitree point(bitree T,datatype e)            /*查找元素为e的结点的指针*/
{
bitree q[1000];
int front=0,rear=0;                /*头节点不存储元素*/
binode *p;
if(T)
{
q[rear]=T;
rear++;
while(front!=rear)            /*利用队列查找*/
{
p=q[front];
front++;
if(p->data==e)
return p;
if(p->lchild)
q[rear++]=p->lchild;
if(p->rchild)
q[rear++]=p->rchild;
}
}
return NULL;
}
datatype leftchild(bitree T,datatype e)        /*返回二叉树结点左孩子元素值*/
{
bitree p;
if(T)
{
p=point(T,e);
if(p&&p->lchild)
return p->lchild->data;
}
return 0;
}
datatype rightchile(bitree T,datatype e)
{
bitree p;
if(T)
{
p=point(T,e);                /*寻找该节点*/
if(p&&p->rchild)
return p->rchild->data;
}
return 0;
}
int deleteleftchild(bitree p)                /*删除二叉树左子树的操作*/
{
if(p)
{
destroybitree(&(p->lchild));
return 1;
}
return 0;
}
int deleterightchild(bitree p)            /*删除右子树*/
{
if(p)
{
destroybitree(&(p->rchild));
return 1;
}
return 0;
}
int main()
{
bitree T;
initbitree(&T);
creatbitree(&T);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: