设计并验证如下算法:输入一棵二叉树的广义表形式,建立该二叉树的二叉链表结构,分别实现层次遍历、非递归中序遍历该二叉树。

#include<stdio.h>
#include<stdlib.h>
typedef struct b_tree
{
char data;//这里可以自由修改 如果是字母那就char
struct b_tree *left,*right;
}Tree,*B_tree;//结点
void floor_traverse(B_tree tree)
{
B_tree queue[100];//数组当队列
int head=0,rear=0;//头指针和尾指针
queue[head++]=tree;//先将根节点入队
while (head != rear)//队列不为空则进行下列操作
{
//输出当前结点 并将其子节点入队
printf(" %c “,queue[rear]->data);
if (queue[rear]->left!=NULL)
{
queue[head++]=queue[rear]->left;//左子树入队
}
if(queue[rear]->right!=NULL)
queue[head++]=queue[rear]->right;//左子树入队
rear++;//操作完当前结点 队尾指针前移
}
printf(”\n");

}
void shuchu(B_tree tree)
{
B_tree stack[100];//数组栈
int top=0,base=0;//创建栈顶和栈底指针
B_tree temp=tree;//父节点信息
while(temp || top!=0)
{
if(temp)//存在左子树,则将左子树入栈
{
stack[top++]=temp;
temp=temp->left;
}
else
{
printf(" %c “,stack[top-1]->data);
temp=stack[top-1]->right;
top–;//没有左孩子了 出栈输出
}
}
}
int main()
{
B_tree stack[500]; //用数组创建栈
int top=0,base=0; //栈顶指针和栈底指针
B_tree T=NULL; //初始树根为空
char ch; //元素变量
puts(“请输入二叉树的广义表表达式(以#结束输入)”);
scanf(”%c",&ch); //输入元素
B_tree p; //父节点指针 保存上一操作的数据结点的指针
while(ch!=’#’)
{
int lflag; //标记变量,如果是1创建左子树,如果是0创建右子树
switch(ch)
{
case ‘(’:stack[top++]=p; //遇到左括号父节点入栈,准备构建子树
lflag=1; //准备构建左子树的标记
break;
case ‘,’: lflag=0; //遇到逗号,准备构建右子树的标记
break;
case ‘)’:stack[–top]; //遇到右括号表示左右子树均构建完毕,父节点出栈
break;
default: //遇到数据元素 数据无条件建立结点
{
p=(B_tree)malloc(sizeof(Tree)); //给结点分配地址空间
p->right=NULL;
p->left=NULL; //左右节点暂时赋值为空
p->data=ch; //存储元素
if(TNULL) //初始构建树根 只会运行一次
{
T=p;
}
else
{
B_tree parent=stack[top-1]; //获取父节点
if(lflag
1)
parent->left=p;
else if(lflag==0)
parent->right=p;
}
}
}
scanf("%c",&ch); //已经处理完一个输入的字符,继续输入
}
puts(“二叉树构建完成!”);
puts(“输入任意字符展示层次遍历效果”);
getchar();
getchar();
floor_traverse(T);
puts(“输入任意字符展示中序遍历效果”);
getchar();
shuchu(T);
return 0;
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值