【数据结构】树-建立二叉树 C语言

【数据结构】树-建立二叉树

任务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--];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值