主题:二叉树的实现?
[code=c]
在主函数中如何实现二叉树?本人用的是层次遍历二叉树;
以下是代码:
#include <iostream.h>
#define max 20
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//初始化
int Initiate(BiTree &bt)
{
bt=new BiTNode;
if(!bt)
return 0;
bt->data=-1;
bt->lchild=NULL;
bt->rchild=NULL;
return 1;
}
//创建二叉树
BiTree Creat(int x,BiTree lbt,BiTree rbt)
{
BiTree p;
p=new BiTNode;
if(!p)
return NULL;
p->data=x;
p->lchild=lbt;
p->rchild=rbt;
return p;
}
//左子树插入节点
BiTree InsertL(BiTree bt,int x,BiTree parent)
{
BiTree p;
p=new BiTNode;
if(parent==NULL)
{
cout<<"插入失败!"<<endl;
return NULL;
}
if(!p)
return NULL;
p->data=x;
p->lchild=NULL;
p->rchild=NULL;
if(parent->lchild==NULL)
parent->lchild=p;
else
{
p->lchild=parent->lchild;
parent->lchild=p;
}
return bt;
}
//右子树插入节点
BiTree InsertR(BiTree bt,int x,BiTree parent)
{
BiTree p;
p=new BiTNode;
if(parent==NULL)
{
cout<<"插入失败!"<<endl;
return NULL;
}
if(!p)
return NULL;
p->data=x;
p->lchild=NULL;
p->rchild=NULL;
if(parent->rchild==NULL)
parent->rchild=p;
else
{
p->rchild=parent->rchild;
parent->rchild=p;
}
return bt;
}
//删除左子树
BiTree DeleteL(BiTree bt,BiTree parent)
{
BiTree p;
if(parent==NULL||parent->lchild==NULL)
{
cout<<"删除失败!"<<endl;
return NULL;
}
p=parent->lchild;
parent->lchild=NULL;
delete p;
return bt;
}
//删除左子树
BiTree DeleteR(BiTree bt,BiTree parent)
{
BiTree p;
if(parent==NULL||parent->rchild==NULL)
{
cout<<"删除失败!"<<endl;
return NULL;
}
p=parent->rchild;
parent->rchild=NULL;
delete p;
return bt;
}
//访问当前节点的数据域
void Visit(BiTNode *bt)
{
cout<<" "<<bt->data<<" ";
}
//层次遍历
void LevelOrder(BiTree bt)
{
BiTree Queue[max];
int front,rear;
if(bt==NULL)
return;
front=-1;
rear=0;
Queue[rear]=bt;
while(front!=rear)
{
front++;
Visit(Queue[front]);
if(Queue[front]->lchild!=NULL)
{
rear++;
Queue[rear]=Queue[front]->lchild;
}
if(Queue[front]->rchild!=NULL)
{
rear++;
Queue[rear]=Queue[front]->rchild;
}
}
}
//主函数
void main()
{
BiTree lbt;
BiTree rbt;
BiTree newtree=NULL;
Initiate(lbt);
Initiate(rbt);
//应该怎样实现呢?用以输入和输出二叉树的数据
}[/code]
在主函数中如何实现二叉树?本人用的是层次遍历二叉树;
以下是代码:
#include <iostream.h>
#define max 20
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//初始化
int Initiate(BiTree &bt)
{
bt=new BiTNode;
if(!bt)
return 0;
bt->data=-1;
bt->lchild=NULL;
bt->rchild=NULL;
return 1;
}
//创建二叉树
BiTree Creat(int x,BiTree lbt,BiTree rbt)
{
BiTree p;
p=new BiTNode;
if(!p)
return NULL;
p->data=x;
p->lchild=lbt;
p->rchild=rbt;
return p;
}
//左子树插入节点
BiTree InsertL(BiTree bt,int x,BiTree parent)
{
BiTree p;
p=new BiTNode;
if(parent==NULL)
{
cout<<"插入失败!"<<endl;
return NULL;
}
if(!p)
return NULL;
p->data=x;
p->lchild=NULL;
p->rchild=NULL;
if(parent->lchild==NULL)
parent->lchild=p;
else
{
p->lchild=parent->lchild;
parent->lchild=p;
}
return bt;
}
//右子树插入节点
BiTree InsertR(BiTree bt,int x,BiTree parent)
{
BiTree p;
p=new BiTNode;
if(parent==NULL)
{
cout<<"插入失败!"<<endl;
return NULL;
}
if(!p)
return NULL;
p->data=x;
p->lchild=NULL;
p->rchild=NULL;
if(parent->rchild==NULL)
parent->rchild=p;
else
{
p->rchild=parent->rchild;
parent->rchild=p;
}
return bt;
}
//删除左子树
BiTree DeleteL(BiTree bt,BiTree parent)
{
BiTree p;
if(parent==NULL||parent->lchild==NULL)
{
cout<<"删除失败!"<<endl;
return NULL;
}
p=parent->lchild;
parent->lchild=NULL;
delete p;
return bt;
}
//删除左子树
BiTree DeleteR(BiTree bt,BiTree parent)
{
BiTree p;
if(parent==NULL||parent->rchild==NULL)
{
cout<<"删除失败!"<<endl;
return NULL;
}
p=parent->rchild;
parent->rchild=NULL;
delete p;
return bt;
}
//访问当前节点的数据域
void Visit(BiTNode *bt)
{
cout<<" "<<bt->data<<" ";
}
//层次遍历
void LevelOrder(BiTree bt)
{
BiTree Queue[max];
int front,rear;
if(bt==NULL)
return;
front=-1;
rear=0;
Queue[rear]=bt;
while(front!=rear)
{
front++;
Visit(Queue[front]);
if(Queue[front]->lchild!=NULL)
{
rear++;
Queue[rear]=Queue[front]->lchild;
}
if(Queue[front]->rchild!=NULL)
{
rear++;
Queue[rear]=Queue[front]->rchild;
}
}
}
//主函数
void main()
{
BiTree lbt;
BiTree rbt;
BiTree newtree=NULL;
Initiate(lbt);
Initiate(rbt);
//应该怎样实现呢?用以输入和输出二叉树的数据
}[/code]