zoukankan      html  css  js  c++  java
  • 8606 二叉树遍历的建设和运营

    8606 二叉树遍历的建设和运营

    时限:1000MS  内存限制:1000K

    问题: 编程题   语言: 无限
    叙述性说明

    用二进制表示的名单二叉树结构:按第一个二进制序列,以便输入节点值(一个字符),'#'字符表示空树。构造二叉链表表示的二叉树T;再输出三种遍历序列。本题仅仅给出部分代码,请补全内容。


    #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; ________________________ // 生成根结点 _______________________ // 构造左子树 _________________________ // 构造右子树 } return OK; } // CreateBiTree Status PrintElement( ElemType e ) { // 输出元素e的值 printf("%c", e ); return OK; }// PrintElement Status PreOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) { // 前序遍历二叉树T的递归算法,对每一个数据元素调用函数Visit。 //补全代码,可用多个语句 } // PreOrderTraverse Status InOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) { // 中序遍历二叉树T的递归算法。对每一个数据元素调用函数Visit。 //补全代码,可用多个语句 } // InOrderTraverse Status PostOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) { // 后序遍历二叉树T的递归算法,对每一个数据元素调用函数Visit。 //补全代码,可用多个语句 } // PostOrderTraverse int main() //主函数 { //补充代码 }//main




    输入格式

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

    输出格式

    第一行:二叉树的先序遍历序列
    第二行:二叉树的中序遍历序列
    第三行:二叉树的后序遍历序列
    输入例子

    AB##C##
    输出例子

    ABC
    BAC

    BCA


    答案:

    /*构造二叉链表表示的二叉树:按先序次序输入二叉树中结点的值(一个字符),'#'字符表示空树,
    构造二叉链表表示的二叉树T;再输出三种遍历序列。本题仅仅给出部分代码,请补全内容。*/
    #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。
       //补全代码,可用多个语句
        if(T)
        {
            if(Visit(T->data))
                if(PreOrderTraverse(T->lchild,Visit))
                    if(PreOrderTraverse(T->rchild,Visit))
                        return OK;
                    return ERROR;
    
        }
        else return OK;
    
    
    } // PreOrderTraverse
    
    Status InOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) {
         // 中序遍历二叉树T的递归算法,对每一个数据元素调用函数Visit。

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

    //补全代码,可用多个语句 if(T) { if(PostOrderTraverse(T->lchild,Visit)) if(PostOrderTraverse(T->rchild,Visit)) if(Visit(T->data)) return OK; return ERROR; } else return OK; } // PostOrderTraverse int main() //主函数 { BiTree T;//补充代码 CreateBiTree(T); PreOrderTraverse( T, PrintElement); printf(" "); InOrderTraverse(T,PrintElement); printf(" "); PostOrderTraverse(T,PrintElement ); printf(" "); return 0; }//main




    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    Fix Installing .NET Framework 3.5 failed Error Code 0x800F0954 on Windows 10
    RHEL8安装五笔输入法
    Enable EPEL and Local Repository on RHEL8
    Why is Yum Replaced by DNF?
    检查Linux服务器是否被攻击的常用命令及方法
    IDEA 主题
    IDEA 如何显示一个类中所有的方法
    Appium 安装以及安装过程中遇到的问题
    Maven 如何发布 jar 包到 Nexus 私库
    java泛型的基本使用
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4647267.html
Copyright © 2011-2022 走看看