二叉链表的建立

 二叉链表的建立
为了后面遍历二叉树方便,先介绍建立二叉链表的算法(假设elemtype 为char型)。
假设二叉链表的数据类型描述如刚才所述,为建立二叉链表,用一个一维表数组来模拟队列,存放输入的结点,但是,输入结点时,必须按完全二叉树形式,才能使结点间满足性质5,若为非完全二叉树,则必须给定一些假想结点(虚结点),使之符合完全二叉树形式。为此,我们在输入结点值时,存在的结点则输入它对应的字符,不存在的结点(虚结点),输入逗号,最后以一个特殊符号 "#"作为输入的结束,表示建二叉链表已完成。建成的二叉链表可以由根指针root唯一确定。
算法描述如下:
#include<iostream.h>
typedef char elemtype;
struct bitree
{ elemtype data;
bitree *lchild,*rchild;
};
bitree *create()
{ bitree *q[100]; //定义q数组作为队列存放二叉链表中结点,100为最大容量
bitree *s; //二叉链表中的结点
bitree *root ; //二叉链表的根指针
int front=1,rear=0; //定义队列的头、尾指针

char ch; //结点的data域值
root=NULL;
cin>>ch;
while(ch!='#') //输入值为#号,算法结束
{ s=NULL;
if(ch!=',') //输入数据不为逗号,表示不为虚结点,否则为虚结点
{ s=new bitree; s->data=ch;
s->lchild=NULL; s->rchild=NULL; }
rear++;
q[rear]=s; //新结点或虚结点进队
if(rear==1) root=s;
else
{ if((s!=NULL)&&(q[front]!=NULL))
{ if(rear%2==0) q[front]->lchild=s; //rear为偶数,s为双亲左孩子
else q[front]->rchild=s;} //rear为奇数,s为双亲右孩子
if(rear%2==1) front++; } //出队
cin>>ch;}
return root;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值