`
hufeng
  • 浏览: 103297 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

读入二叉树的中序和后序遍历,输出此二叉树的前序遍历和叶子节点个数

阅读更多
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "malloc.h"

typedef char DataType;

/*读入二叉树的中序和后序遍历,输出此二叉树的前序遍历和叶子节点个数
测试数据
DGBAECHF
GDBEHFCA
前序遍历:ABDGCF
*/
/*定义二叉树结构体*/
typedef struct tree
{
	DataType d;
	struct tree *lchild,*rchild;
}Tree,*PTree;

/*in表示中序字符串 post 表示后序字符串 ins ine分别表示中序字符串的起始长度 posts poste 分别表示后序字符串的起始长度*/
void makeTree(PTree *p,char *in,int ins,int ine,char *post,int posts,int poste)
{
	int preIndex=0;//定义中序字符串中 中间数的位置
	if(poste<posts||ine<ins) *p=NULL;
	else
	{
		*p=(PTree)malloc(sizeof(Tree));
		(*p)->d=post[poste];
		//(*p)->lchild=NULL;
		//(*p)->rchild=NULL;
		for(preIndex=ins;preIndex<=ine;preIndex++)
		{
			if(post[poste]==in[preIndex])
			{
				makeTree(&(*p)->lchild,in,ins,preIndex-1,post,posts,preIndex-ins-1);
				makeTree(&(*p)->rchild,in,preIndex+1,ine,post,preIndex-ins,poste-1);
				break;
			}
		}
		/*该函数每次从0开始
		while(9)
		{
			if(in[preIndex]==post[poste])break;
			preIndex++;
		}*/

	}
}
/*前序遍历二叉树*/
void preOrder(PTree p)
{
	if(p)
	{
		printf("%c",p->d);
		preOrder(p->lchild);
		preOrder(p->rchild);
	}
}
/*求叶子节点数*/
int leafNum(PTree p)
{
	if(p==NULL)
		return 0;
	else 
		if(p->lchild==NULL&&p->rchild==NULL)
			return 1;
		else 
			return leafNum(p->lchild)+leafNum(p->rchild);
}
void main()
{
	char in[100],post[100];
	int il,pl;
	PTree p;
	printf("输入中序\n");
	gets(in);
	printf("输入后序\n");
	gets(post);
	il=strlen(in);
	pl=strlen(in);
	makeTree(&p,in,0,strlen(in)-1,post,0,strlen(post)-1);
	printf("前序遍历:");
	preOrder(p);
	printf("\n叶子节点数为%d\n",leafNum(p));

}
分享到:
评论

相关推荐

    二叉树创建前序中序后序遍历

    常见的遍历方法包括:前序遍历、中序遍历和后序遍历。 #### 4.1 前序遍历 前序遍历的顺序是先访问根节点,然后递归地进行左子树的前序遍历,最后递归地进行右子树的前序遍历。实现代码如下: ```c void Preoder...

    数据结构(先中后序遍历)

    二叉树的遍历方法不仅限于以上介绍的几种,还有其他变种,比如前序非递归遍历、中序非递归遍历和后序非递归遍历。非递归遍历通常涉及栈或队列等数据结构,对于理解和实现复杂算法非常有帮助。 在实际编程中,理解...

    根据先序与中序遍历结果建立二叉树

    其中,二叉树的遍历是理解二叉树的基础之一,常见的遍历方法有先序遍历、中序遍历和后序遍历。 - **先序遍历**:访问顺序为“根—左—右”。 - **中序遍历**:访问顺序为“左—根—右”。 - **后序遍历**:访问顺序...

    实现哈夫曼树的后序遍历

    后序遍历是一种常见的二叉树遍历方式,其顺序为“左子树-右子树-根节点”。这种遍历方式对于理解哈夫曼树的结构非常有帮助。 在提供的代码中,`postorder()` 函数实现了哈夫曼树的后序遍历。遍历过程中,先递归地...

    用二叉树先序遍历算法创建一组数据构成的二叉树排序,然后用二叉树中序遍历算法实现数据排序输出。

    - **中序遍历**:遍历二叉树的一种方式,首先遍历左子树,然后访问根节点,最后遍历右子树。对于二叉查找树而言,中序遍历的结果会是一个有序序列。 #### 算法步骤 1. **左子树遍历**:递归地遍历左子树,直到到达...

    简单二叉树程序

    本项目"简单二叉树程序"聚焦于二叉树的构建和遍历,特别是针对前序、中序、后序遍历的实现,以及复制构造函数、计算树高、结点数和层序遍历等功能。这些操作对于理解和操作二叉树至关重要。 首先,我们来讨论前序...

    二叉树遍历及其应用

    ### 二叉树遍历及其应用 #### 一、引言 在计算机科学领域,《数据结构》是一门极为重要的基础课程。它不仅涵盖了各种数据结构的设计与实现,还涉及到了算法的设计与分析。其中,二叉树作为一种常用的数据结构,在...

    数据结构-二叉树

    总结来说,二叉树是一种重要的数据结构,通过先序、中序和后序遍历可以有效地访问和操作树中的节点。理解这些概念对于学习数据结构和算法至关重要,也是许多编程面试和实际项目中的常见考点。熟悉这些操作能帮助...

    数据结构实验报告——二叉树

    4. **运行程序**:观察并记录输出结果,包括先序、中序、后序和层次遍历的结果,以及节点总数和叶子节点数。 5. **验证结果**:检查输出结果是否符合预期。 #### 程序解析 程序主要包括以下几个部分: - **...

    数据结构实验-二叉树的建立、遍历、摩斯电码(哈夫曼树)的编码与解码实验代码

    2. 请分别按照前序、中序、后序输出这棵树。 选做部分 背景 在影视剧中,我们经常会看到二战期间情报人员使用电报哒哒哒地发送信息,发送电报所使用的编码叫做摩尔斯电码(或者叫做摩斯密码)。甚至在现代,SOS仍然...

    实验二、二叉树操作.pdf

    通过输入的先序序列,程序会构建出相应的二叉树,并输出其先序、中序、后序和层次遍历的结果。同时,程序还计算了树中的结点总数和叶子数量。 在计算二叉树的深度、结点数和叶子数时,采用了后序遍历的递归算法。...

    求度为2的结点个数-二叉树

    在计算机科学中,二叉树是一种常见的数据结构,它由一个根节点以及最多两个子树(左子树和右子树)组成,这两个子树也是二叉树。每个节点最多有两个子节点。在本问题中,我们将处理一个特定类型的二叉树问题:构建一...

    数据结构 树的存储结构

    在 `main` 函数中,首先创建一个二叉树,然后依次进行前序、中序和后序遍历并打印结果。接着计算叶子节点的总数和树的深度,并输出。 通过这段代码,我们可以学习到关于树的基本操作,包括树的存储结构、树的遍历...

    数据结构课程设计报告之线索二叉树.docx

    为了遍历,还需要额外的辅助函数,如`InFirst()`和`InNext()`用于中序遍历,`PostFirst()`和`PostNext()`用于后序遍历,这些函数帮助找到遍历序列中的下一个节点。 在具体设计中,二叉树节点的结构体`Node`包含元素...

    二叉树的应用

     编程实现二叉树的建立,先序、中序、后序、层序遍历(递归和非递归方法),二叉树的高度、繁茂度,交换左右子树,统计叶子节点的数目,判断是否为完全二叉树,按树的形态在屏幕上打印输出; [基本要求] (1) 从...

    先序建立和遍历二叉树.

    ### 先序建立和遍历二叉树 #### 一、二叉树的基本概念 二叉树(Binary Tree)是一种常用的数据结构,在计算机科学领域有着广泛的应用。它是一种非线性的数据结构,每个节点最多有两个子节点,分别称为左子节点和右子...

    二叉树的节点个数

    本篇文章将基于一个具体的编程问题来探讨如何通过输入的前序遍历序列构建一棵二叉树,并计算该二叉树中的节点个数。 #### 二、问题描述 假设我们有一棵二叉树,其中的节点值为字符类型,并且假设这些字符值都是...

    数据结构课设(表达式类型的实现)

    3. **二叉树的遍历**:主要有前序遍历、中序遍历和后序遍历。前序遍历顺序为根-左-右,中序遍历为左-根-右,后序遍历为左-右-根。不同的遍历方式对应于表达式树的不同计算策略,如前序遍历常用于计算表达式。 4. **...

Global site tag (gtag.js) - Google Analytics