美文网首页
输入二叉树式子创建二叉树并以不同顺序输出二叉树(使用递归)

输入二叉树式子创建二叉树并以不同顺序输出二叉树(使用递归)

作者: 依林_6cd2 | 来源:发表于2018-11-22 18:58 被阅读0次

#include<stdio.h>

#include<stdlib.h>

#include<malloc.h>

#include<stdbool.h>

#define MaxSize 40

typedef struct node{

    char data;

    struct node *lchild;

    struct node *rchild;

}BTNode;

BTNode *CreateBTree(BTNode *b, char str[]){

    BTNode *St[MaxSize], *p=NULL;

    int top=-1,k,j=0;

    char ch;

    ch = str[j];

    while(ch != '\0'){

        switch(ch){

            case '(':

                top++;

                St[top]=p;

                k=1;

                break;

            case ')':

                top--;

                break;

            case ',':

                k=2;

                break;

            default:

                p=(BTNode *)malloc(sizeof(BTNode));

                p ->data=ch;

                p ->lchild = p ->rchild = NULL;

                if(b == NULL)

                    b=p;

                else{

                    switch(k){

                        case 1:

                            St[top] ->lchild = p;

                            break;

                        case 2:

                            St[top] ->rchild =p;

                            break;

                    }

                }

        }

        j++;

        ch = str[j];

    }

    return b;

}

void PreOrder(BTNode *b){

    if(b != NULL){

        printf("%c ",b -> data);

        PreOrder(b -> lchild);

        PreOrder(b -> rchild);

    }

}

void InOrder(BTNode *b){

    if(b != NULL){

        InOrder(b -> lchild);

        printf("%c ",b -> data);

        InOrder(b -> rchild);

    }

}

void PostOrder(BTNode *b){

    if(b != NULL){

        PostOrder(b -> lchild);

        PostOrder(b -> rchild);

        printf("%c ",b -> data);

    }

}

int main(void){

    BTNode * b=NULL;

    char str[66],c;

    int i=0,chose;

    printf("输入'*'号结束输入二叉树式子\n");

    printf("请输入一个二叉树式子\n");

    while(true){

        if((c=getchar())!= '*'){

            str[i]=c;

            i++;

        }

        else{

            printf("输入终止");

            break;

        }

    }

    b = CreateBTree(b,str);

    printf("对应的二叉树已经建立完毕");

    while(true){

        printf("\n\n请选择下列功能选项\n\n");

        printf("1.先序遍历输出二叉树\n2.中序遍历输出二叉树\n3.后序遍历输出二叉树\n");

        printf("\n请输入您的选择:");

        scanf("%d",&chose);

        if(chose>0 && chose<4){

            switch(chose){

                case 1:

                    printf("以先序方式遍历二叉树\n");

                    PreOrder(b);

                    break;

                case 2:

                    printf("以中序方式遍历二叉树\n");

                    InOrder(b);

                    break;

                case 3:

                    printf("以后序方式遍历二叉树\n");

                    PostOrder(b);

                    break;

            }

        }

        else

            printf("请输入1-3中的其中一个数");

    }

    return 0;

}

相关文章

  • LeetCode题解之翻转二叉树

    翻转二叉树 题目描述 翻转一棵二叉树。 示例 : 输入: 输出: 解题思路 方法一:递归 使用递归来翻转二叉树。 ...

  • 输入二叉树式子创建二叉树并以不同顺序输出二叉树(使用递归)

    #include #include #include #include #define Max...

  • 关于二叉树的的深度优先遍历

    记录一下二叉树的深度优先遍历方式 递归方式,比较简单和容易理解 使用线性链表递归创建二叉树 这种构建方式的顺序相当...

  • 栈-N144-二叉树的前序遍历

    题目 概述:给定一个二叉树,返回它的前序遍历要求:使用非递归算法 输入:二叉树的根节点 输出:前序遍历值列表 出处...

  • 算法之二叉树

    二叉树之C++实现 创建二叉树 复制二叉树 先序遍历 递归实现 非递归实现 中序遍历 递归实现 非递归实现 后序遍...

  • 记一次Tree的遍历

    统计利用先序遍历创建的二叉树的深度 利用先序递归遍历算法创建二叉树并计算该二叉树的深度。先序递归遍历建立二叉树的方...

  • 数据结构之二叉树2

    二叉树的创建 二叉树的创建用到了辅助队列,通过辅助队列来创建二叉树; 二叉树的遍历 前(先)序遍历 1、递归实现 ...

  • 剑指 offer:18、二叉树的镜像

    18. 二叉树的镜像 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述 解题思路: 使用递归思路,...

  • 栈-N94-二叉树的中序遍历

    题目 概述:给定一个二叉树,返回它的中序遍历要求:使用非递归算法 输入:二叉树的根节点 输出:中序遍历的值列表 出...

  • 《剑指Offer》-27.二叉树的镜像

    题干 请完成一个函数,输入一棵二叉树,该函数输出它的镜像。二叉树节点的定义如下: 解题思路 输入二叉树 输出二叉树...

网友评论

      本文标题:输入二叉树式子创建二叉树并以不同顺序输出二叉树(使用递归)

      本文链接:https://www.haomeiwen.com/subject/xnkrqqtx.html