【数据结构】树-建立二叉树
任务1:建立二叉树
(1)打开库文件“bintree.h”,熟悉库中的的相关函数。
(2)在“bintree.h”文件中编写函数bnode *creat(),根据扩充二叉树的先序序列建立二叉树p。
扩充二叉树的知识
给定一棵二叉树,对树中不足两个孩子的结点(包括叶子结点)都添上附加结点,使每个结点都有两个孩子结点。输入时附加结点用’#'表示。如"ABC##D#E##F##"
#include <stdio.h>
#include <stdlib.h>
#define N 100
typedef char datatype;
typedef struct node /*二叉树结构定义*/
{
datatype data;
struct node *lch,*rch;
}bnode;
bnode *creat() {//根据所有序列创建二叉树
bnode *p;
char ch;
scanf("%c",&ch);
if(ch == '#'){
p = NULL;
}
else{
if(!(p = (bnode*)malloc(sizeof(bnode)))){
exit(-1);
}
p->data = ch;
p->lch=creat(); /*建立左子树*/
p->rch=creat(); } /*建立右子树*/
return p;
}
void fstorder(bnode *p) /*先序递归遍历二叉树*/
{
if(p)
{
printf("%c",p->data);
fstorder(p->lch);
fstorder(p->rch);
}
}
void lastorder(bnode *p) /*后序递归遍历二叉树*/
{
if(p)
{
lastorder(p->lch);
lastorder(p->rch);
printf("%c",p->data);
}
}
/*顺序栈定义*/
typedef struct
{
bnode *data[N];
int top;
}sqstack;
void init(sqstack *s) /*初始化空栈*/
{
s->top=-1;
}
int empty(sqstack *s) /*判断栈是否为空*/
{
if(s->top>-1) return 0;
else return 1;
}
int full(sqstack *s) /*判断栈是否为满*/
{
if(s->top==N-1) return 1;
else return 0;
}
void push(sqstack *s ,bnode *x) /*进栈*/
{
if(!full(s))
s->data[++s->top]=x;
}
bnode *pop(sqstack *s) /*出栈*/
{
if(!empty(s))
return s->data[s->top--];
}