通过输入字符串来构建二叉树

Posted 人生列车

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过输入字符串来构建二叉树相关的知识,希望对你有一定的参考价值。

对二叉树的一系列操作都是建立在先将二叉树构造出来的前提上。大四考研的某天早上偷偷躲在宿舍敲二叉树的代码,也是醉醉的。学习就应该趁年轻,老了就学不动了。

首先是对二叉树的节点的一个声明:

typedef struct BTree{
    char str;
    struct BTree * lchild;
    struct BTree * rchild;
}BTree;

  然后我是打算用递归外加先序的方式对二叉树进行构建的,也就对输入字符串提出一个要求:

printf("Please input the tree(use char and #)\n要求按照先序遍历的方式输入,加上#进行区分\n例如123# #4##5##:\n");

构建二叉树的函数:

BTree* creat_tree(){
    BTree* temp;
    while(*p==‘ ‘)p++;
    if(*p==‘#‘){
        p++;
        return NULL;
    }
    if(*p!=‘ ‘){
        temp = (BTree *)malloc(sizeof(BTree));
        temp->str=*p++;
        temp->lchild=creat_tree();
        temp->rchild=creat_tree();
    }
    return temp;
}

  同时为了将头结点单独获取保存,供后边操作使用,因此将头结点的构建单独放在main函数中处理了一下,下边是我的完整代码,运行无误。

#include <stdio.h>
#include <stdlib.h>

#define MAX 100

char * p;
typedef struct BTree{
    char str;
    struct BTree * lchild;
    struct BTree * rchild;
}BTree;

BTree* creat_tree(){
    BTree* temp;
    while(*p==‘ ‘)p++;
    if(*p==‘#‘){
        p++;
        return NULL;
    }
    if(*p!=‘ ‘){
        temp = (BTree *)malloc(sizeof(BTree));
        temp->str=*p++;
        temp->lchild=creat_tree();
        temp->rchild=creat_tree();
    }
    return temp;
}

void pre_visit(BTree* node){
    printf("%c",node->str);
    if(node->lchild!=NULL)pre_visit(node->lchild);
    if(node->rchild!=NULL)pre_visit(node->rchild);
}
int main()
{
    char tree[MAX];p=tree;
    BTree * head;
    printf("Please input the tree(use char and #)\n要求按照先序遍历的方式输入,加上#进行区分\n例如123# #4##5##:\n");
    //scanf("%s",tree);
    gets(tree);

    if(*p!=‘\0‘&&*p!=‘ ‘&&*p!=‘#‘){
        head=(BTree *)malloc(sizeof(BTree));
        head->str=*p++;
        //printf("head is %c",head->str);
        head->lchild=creat_tree();
        head->rchild=creat_tree();
    }

    printf("tree is :\n");
    pre_visit(head);
    return 0;
}

  

以上是关于通过输入字符串来构建二叉树的主要内容,如果未能解决你的问题,请参考以下文章

二叉树进阶题------二叉树的构建及遍历;二叉搜索树转换成排序双向链表;二叉树创建字符串

二叉树进阶题------二叉树的构建及遍历;二叉搜索树转换成排序双向链表;二叉树创建字符串

数据结构 二叉树

Leetcode 654.最大二叉树

LeetCode根据二叉树创建字符串&&二叉树的构建以及遍历(递归)

每日编程-96期 最大二叉树