通过输入字符串来构建二叉树
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; }
以上是关于通过输入字符串来构建二叉树的主要内容,如果未能解决你的问题,请参考以下文章
二叉树进阶题------二叉树的构建及遍历;二叉搜索树转换成排序双向链表;二叉树创建字符串
二叉树进阶题------二叉树的构建及遍历;二叉搜索树转换成排序双向链表;二叉树创建字符串