📄 打印二叉树结构.cpp
字号:
#define maxsize 10
#include"stdio.h"
#include"malloc.h"
#define NULL 0
//二叉树的数据结构
typedef struct node{
char data;//数据
struct node *lchild,*rchild;//左右子树
int du;//该节点的度
}Bitree;
Bitree *Q[maxsize]; // 队列Q为指针类型
Bitree *creatree(){ //建立二叉树,返回根指针
char ch;
int front,rear;
Bitree *T,*s;
T=NULL; //置空二叉树
front=1;rear=0; //置空队列
ch=getchar(); //输入第一个字符
while(ch!='#'){ //不是结束符号时继续
s=NULL; //如果输入的是虚结点,则无需为虚结点申请空间
if(ch!='@') //@表示虚结点,不是虚结点时建立新结点
{
s=(Bitree *)malloc(sizeof(Bitree));
s->data=ch;s->lchild=s->rchild=NULL;
s->du=0; //将根结点 du置0
}
rear++;Q[rear]=s; //将虚结点指针NULL或新结点地址入队
if(rear==1) T=s; //输入的第一个结点为根结点
else{
if(s!=NULL&&Q[front]!=NULL) //孩子和双亲结点均不是虚结点
{
if(rear%2==0) Q[front]->lchild=s;
else Q[front]->rchild=s;
s->du=Q[front]->du+1; //存储各结点度
}
if(rear%2==1) front++; //结点*Q[front]的两个孩子已处理完毕front+1
}
ch=getchar();
}
return T;
}
void inorder(Bitree *T){
if(T) //若二叉树不空
{
inorder(T->rchild); //RDL遍历左子树
for(int i=0;i<T->du;i++) //利用结点的度来控制结点的横向位置
{
printf("\t");
}
printf("%4c\n",T->data); //访问根
inorder(T->lchild); //RDL遍历右子树
}
}
void main()
{
Bitree *TR;printf("请输入结点信息:\n");
TR=creatree();printf("打印结果为:\n");
inorder(TR);printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -