C语言 数据结构 实验四 【自用】

C语言 数据结构 实验四8606 - 二叉树的构建及遍历操作#include "stdio.h"#include "malloc.h"#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typed...
摘要由CSDN通过智能技术生成

C语言 数据结构 实验四


8606 - 二叉树的构建及遍历操作

#include "stdio.h"
#include "malloc.h"
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;

typedef char ElemType;
typedef struct BiTNode
{
   
    ElemType data;
    struct BiTNode *lchild, *rchild; //左右孩子指针
}BiTNode, *BiTree;

Status CreateBiTree(BiTree &T)
{
   
//算法6.4
//按先序次序输入二叉树中结点的值(一个字符) ’#’字符表示空树
//构造二叉链表表示的二叉树T
    char ch;
    scanf("%c", &ch);
    if (ch == '#') T = NULL;
    else
    {
   
        if(!(T = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR;
        T->data = ch; //生成根结点
        CreateBiTree(T->lchild); //构造左子树
        CreateBiTree(T->rchild); //构造右子树
    }
    return OK;
} //CreateBiTree


Status PrintElement(ElemType e)
{
   
//输出元素e的值
    printf("%c", e);
    return OK;
} //PrintElement


Status PreOrderTraverse(BiTree T, Status(*Visit)(ElemType))
{
   
//前序遍历二叉树T的递归算法 对每个数据元素调用函数Visit
//补全代码 可用多个语句
    Visit = PrintElement;
    if(T)
    {
   
        Visit(T->data);
        PreOrderTraverse(T->lchild, PrintElement);
        PreOrderTraverse(T->rchild, PrintElement);
    }
    else
    {
   
        return FALSE;
    }
    return TRUE;
} //PreOrderTraverse

Status InOrderTraverse(BiTree T, Status(*Visit)(ElemType))
{
   
//中序遍历二叉树T的递归算法 对每个数据元素调用函数Visit
//补全代码 可用多个语句
    Visit = PrintElement;
    if(T)
    {
   
        InOrderTraverse(T->lchild, PrintElement);
        Visit(T->data);
        InOrderTraverse(T->rchild, PrintElement);
    }
    else
    {
   
        return FALSE;
    }
    return TRUE;
} //InOrderTraverse

Status PostOrderTraverse(BiTree T, Status(*Visit)(ElemType))
{
   
//后序遍历二叉树T的递归算法 对每个数据元素调用函数Visit
//补全代码 可用多个语句
    Visit = PrintElement;
    if(T)
    {
   
        PostOrderTraverse(T->lchild, PrintElement);
        PostOrderTraverse(T->rchild, PrintElement);
        Visit(T->data);
    }
    else
    {
   
        return FALSE;
    }
    return TRUE;
} //PostOrderTraverse



int main() //主函数
{
   
    BiTree T = NULL;

    CreateBiTree(T);

    PreOrderTraverse(T, PrintElement);
    printf("\n");

    InOrderTraverse(T, PrintElement);
    printf("\n");

    PostOrderTraverse(T, PrintElement);
    printf("\n");

    //补充代码
} //main

/*
Description
构造二叉链表表示的二叉树:按先序次序输入二叉树中结点的值(一个字符),'#'字符表示空树,构造二叉链表表示的二叉树T;再输出三种遍历序列。
本题只给出部分代码,请补全内容。


--输入格式--
第一行:输入一棵二叉树的先序遍历序列


--输出格式--
第一行:二叉树的先序遍历序列
第二行:二叉树的中序遍历序列
第三行:二叉树的后序遍历序列


--输入样例--
AB##C##


--输出样例--
ABC
BAC
BCA
*/


8607 - 实现二叉排序树的各种算法(1)

#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;

typedef enum {
   Link,Thread} pointerTag;
typedef int ElemType;
typedef struct _BiTNode
{
   
    ElemType data;
    struct _BiTNode *lchild, *rchild;
    pointerTag ltag, rtag;
}BiTNode, *BiTree;
BiTree preNode;

typedef BiTree QElemType;
#define MAXQSIZE 100

typedef struct
{
   
    QElemType *base;
    int front;
    int rear;
}SqQueue;

Status InitQueue(SqQueue &Q)
{
   
    if(!(Q.base = (QElemType *)malloc(sizeof(QElemType) * MAXQSIZE)))
        return ERROR;
    Q.front = Q.rear = 0;
    return OK;
}

Status EnQueue(SqQueue &Q, QElemType e)
{
   
    if((Q.rear+1)%MAXQSIZE == Q.front)
        return ERROR;
    Q.base[Q.rear] = e;
    Q.rear = (Q.rear+1)%MAXQSIZE;
    return OK;
}

Status DeQueue(SqQueue &Q, QElemType &e)
{
   
    if(Q.rear == Q.front)
        return ERROR;
    e = Q.base[Q.front];
    Q.front = (Q.front+1)%MAXQSIZE;
    return OK;
}

Status Insert(BiTree &T)
{
   
    BiTree inputNode, traverseNode;
    ElemType e;

    scanf("%d", &e);

    if(!T)
    {
   
        if(!(T = (BiTree)malloc(sizeof(BiTNode))))
        {
   
            return ERROR;
        }
        T->data = e;
        T->lchild = NULL;
        T->rchild = NULL;
        T->ltag = Link;
        T->rtag = Link;
        return OK;
    }
    else
    {
   
        if(!(inputNode = (BiTree)malloc(sizeof(BiTNode))))
        {
   
            return ERROR;
        }
        inputNode->data = e;
        inputNode->lchild = NULL;
        inputNode->rchild = NULL;
        inputNode->ltag = Link;
        inputNode->rtag = Link;
        traverseNode = T;
    }

    while(TRUE)
    {
   
        if(inputNode->data < traverseNode->data)
        
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值