C语言利用二叉树的操作实现根据给定的字符串生成二叉树并前序、中序、后序输出二叉树。

Description

根据给定的字符串生成二叉树并前序、中序、后序此二叉树。

Input

给定一字符串,其中#表示空。

例:上图输入为

HDB#A##C##G#FE###

Output

分别输出此二叉树前序、中序和后序。

Sample Input

HDB#A##C##G#FE###

Sample Output

HDBACGFE
BADCHGEF
ABCDEFGH

HINT

题目如上关于二叉树的操作,在这里使用二叉树的递归定义来完成这道题

二叉树是n个(n>=0)个节点的有限集合,他要么为空二叉树,要么为一个根节点和两棵互不相交的子树组成。

这两个子树分别叫做左子树和右子树。

那么根据题意和二叉树的定义,我们先定义一个结构体,元素为:char类型的数据,和两个自身类型的指针,左子树指针,和右子树指针。

#include<stdio.h>
typedef struct node{char data;struct node *lChild, *rChild;
}BinTree;

想要对二叉树进行相应的操作,就得先拥有一个二叉树,里面存放我们想要的数据。

那么创建一个二叉树的构建函数。

BinTree* CreateBinTree(){BinTree* bt = NULL;char s;scanf("%c",&s);if(s=='#'){bt = NULL;}else{bt = (BinTree*)malloc(sizeof(BinTree));bt->data = s;bt->lChild = CreateBinTree();bt->rChild = CreateBinTree();}return bt;
}

当某个子树没有数据的时候,我们使用#来代表这个节点的这个子树没有数据。bt=NULL会返回给上一层递归调用的函数。

接下来就是按照先序,中序,后序的顺序进行输出。其实了解二叉树的这些遍历顺序就知道。

所谓的先序,中序,后序,无非就是遍历的时候访问父节点和左子树节点、右子树节点的顺序不同。导致递归函数被调用的先后顺序不同。理解这三个顺序中的一个,其余的也就都能理解出来。

先序,中序,后序代码如下:

void PreOrder(BinTree* bt)
{if(bt!=NULL){printf("%c",bt->data);PreOrder(bt->lChild);PreOrder(bt->rChild);}
}
void PostOrder(BinTree* bt)
{if(bt!=NULL){PostOrder(bt->lChild);PostOrder(bt->rChild);printf("%c",bt->data);}
}
void InOrder(BinTree* bt)
{if(bt!=NULL){InOrder(bt->lChild);printf("%c",bt->data);InOrder(bt->rChild);}
}

上面就是这些所有的函数,包括按照三种顺序遍历,和生成二叉树的函数,全部代码如下:

 #include<stdio.h>
typedef struct node{char data;struct node *lChild, *rChild;
}BinTree;BinTree* CreateBinTree(){BinTree* bt = NULL;char s;scanf("%c",&s);if(s=='#'){bt = NULL;}else{bt = (BinTree*)malloc(sizeof(BinTree));bt->data = s;bt->lChild = CreateBinTree();bt->rChild = CreateBinTree();}return bt;
}
void PreOrder(BinTree* bt)
{if(bt!=NULL){printf("%c",bt->data);PreOrder(bt->lChild);PreOrder(bt->rChild);}
}
void PostOrder(BinTree* bt)
{if(bt!=NULL){PostOrder(bt->lChild);PostOrder(bt->rChild);printf("%c",bt->data);}
}
void InOrder(BinTree* bt)
{if(bt!=NULL){InOrder(bt->lChild);printf("%c",bt->data);InOrder(bt->rChild);}
} int main(){BinTree *p=NULL;p = CreateBinTree();PreOrder(p);printf("\n");InOrder(p);printf("\n");PostOrder(p);return 0;
}

C语言利用二叉树的操作实现根据给定的字符串生成二叉树并前序、中序、后序输出二叉树。相关推荐

  1. 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...

    二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...

  2. 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++

    a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...

  3. 先序中序后序两两结合重建二叉树

    遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次.由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转 ...

  4. java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...

    224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...

  5. 序列化和反序列化二叉树 -----前序,中序,后序,层序

    目录 一.序列化和反序列化 1.什么是序列化和反序列化 二.前序遍历 1.序列化 1.问题分析 2.代码实现 2.反序列化 1.问题分析 2.代码实现 三.后序遍历 1.序列化 1.思路分析 2.代码 ...

  6. 二叉树的前、中、后序遍历

    所谓二叉树遍历是按某种特定规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次.访问结点所做的操作依赖于具体的应用问题. 遍历是二叉树上最重要的运算之一,也是二叉树进行其它运算的基础. 二 ...

  7. 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法

    本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...

  8. 二叉树遍历(递归实现前序/中序/后序遍历)

    1. 准备工作 我们先定义一棵普通的二叉树,如下图 2. 前序遍历 通过递归进行遍历: 如果二叉树为空,则操作返回: 如果非空,否则从根结点开始,然后遍历左子树,再遍历右子树. 前序遍历的结果是:AB ...

  9. 二叉树遍历方法——前、中、后序遍历(图解)

    目录 一.前序遍历 (1)递归版本 (2)非递归版本 二.中序遍历 (1)递归版本 (2)非递归版本 三.后序遍历 (1)递归版本 (2)非递归版本 四.总结 五.测试程序 六.程序输出 二叉树的遍历 ...

最新文章

  1. php 的webservice类库NuSoap介绍
  2. leetcode 349. 两个数组的交集 两种方案,c语言实现
  3. 北斗导航 | 自主无人系统多传感器融合技术(学术PPT分享附视频链接)
  4. Service Request Account field in CRM and C4C
  5. java replaceall 大小写_Java replaceAll不区分大小写
  6. 高版本号chrome安装flashplayer debuger后无法使用的问题
  7. 数据产品-数据指标标签常用sql函数
  8. java 中的jframe_java中JFrame是什么
  9. SQLi LABS Less 27 联合注入+报错注入+布尔盲注+时间盲注
  10. LYNC功能之呼叫合并
  11. 卧槽,又来一个 Java 神器!!
  12. 【转】高性能web开发
  13. Java-注解第一篇认识Annotation
  14. SSM框架整合及详解
  15. PCB焊接——原理篇
  16. 计网笔记-计网总结-计网复习提纲-第一章.概述
  17. upc组队训练第十九场
  18. 信息系统项目管理(五)信息系统安全技术
  19. 415报错,两种解决方法
  20. 软件工程案例教程答案(第三版)韩万江 姜立新 编著 课后题答案 (软件项目开发实践)

热门文章

  1. 上海浦东机场的wifi使用攻略
  2. 操作系统分类及Linux
  3. Ant简介及视频教程
  4. Android手机商城
  5. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
  6. 易语言GIF屏幕录制
  7. 穿山甲别于传统广告联盟,造势创建新角色
  8. 简单的实现app界面劫持和后台监控
  9. 【电子学会】2022年12月图形化一级 -- 和平使者
  10. 【用户价值分析 RFM模型】用户价值分析