二叉链表的建立
来源:互联网 发布:办公室网络布线方案 编辑:程序博客网 时间:2024/04/29 09:57
二叉链表的建立
为了后面遍历二叉树方便,先介绍建立二叉链表的算法(假设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;
}
- 建立二叉树的二叉链表
- 二叉链表的建立
- 关于建立二叉链表存储的二叉树:
- 二叉树的建立,从动态二叉链表转化为静态二叉链表
- 二叉链表的建立、遍历,二叉树的深度、总结点、复制、叶结点总数
- 二叉树的建立
- 二叉树的建立
- 二叉树的建立
- 二叉树的建立
- 二叉树的建立
- 二叉树的建立
- 二叉树的建立
- 二叉树的建立
- 二叉树的建立
- 【二叉树的建立】
- 二叉树的建立
- 二叉树的建立
- 二叉树的建立
- System.getProperty() 属性大全
- 这是我好久没有来了的地方,哎,都快与IT隔绝了
- 2008台湾大选投票最新结果 -- 转自新加坡联合早报
- 今天泡论坛又泡多了
- 为什么 ASP.NET AJAX UpdatePanels 是危险的?
- 二叉链表的建立
- 从选票看台湾...联想
- 技术与业务
- 从台湾大选看平潭经济的起飞...
- 英语、日语
- 利用 Office 的 OWC 做报表
- 怎样成为优秀的软件模型设计者
- 记录实习生活(6)
- 面向对象软件设计的“开—闭”原则