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




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

  • 相关阅读:
    argparse模块的使用
    tf.stack() /tf.unstack()
    什么是tensor
    tf.size()函数
    tf.nn.l2_loss()的用法
    CNN中的卷积
    tf.reverse()
    学习音视频编程技术 博客
    shell 批量计算MD5值
    线程池的实现
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4647267.html
Copyright © 2011-2022 走看看