二叉树遍历:已知中序和后序,求前序

已知中序和后序,求二叉树的前序遍历 【问题描述】 给定二叉树节点个数以及其中序遍历和后序遍历,求其前序遍历。 【输入形式】 共三行。 第一行是一个正整数N,表示节点个数。 第二行共N个正整数,表示二叉树的中序遍历。 第三行共N个正整数,表示二叉树的后序遍历。 【输出形式】 共一行,输出前序遍历。 【样例输入】 10 3 6 7 4 5 9 10 2 8 1 3 7 6 5 10 9 4 8 1 2 【样例输出】 2 4 6 3 7 ... 阅读详情

根据输入的二叉树中序和后序序列来构造该二叉树,输出该二叉树的前序序列
和该二叉树的度为2的结点的个数并能判断该二叉树是否为二叉排序树(若是输出Yes;否则输出No)。

 

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

void exit(int);

#define MAX 1000

typedef struct node
{
    char d;
    struct node *lchild, *rchild;
}Tnode;
//in[]:中序序列,post[]:后序序列,可知post的最后一个结点即是根
//MK(in, 0, strlen(in) - 1, post, 0, strlen(post) - 1, &r);
void MK(char in[], int is, int ie, char post[], int posts, int poste, Tnode **r)
{
    int i;
    if (is>ie || posts>poste)
    {
        *r = NULL;
    }
    else
    {
        *r = (Tnode *)malloc(sizeof(Tnode));
        (*r)->d = post[poste];
        for (i=is; i<=ie; i++)
        {	
		//后序的最后一个字母(post[poste])为树的根节点,然后查看中序序列中这个字母的位置,它之前的为左子树,之后的为右子树,然后分别对这两个子树的前序和中序序列做同样的步骤即可。
            if (in[i] == post[poste])
				
            {
                MK(in, is, i-1, post, posts, posts+i-is-1, &(*r)->lchild);
                MK(in, i+1, ie, post, posts+i-is, poste-1, &(*r)->rchild);
                break;
            }
            if (i > ie)
            {
                printf("输入错误!\n");
                exit(1);
            }
        }
    }
}

void preorder(Tnode *r)
{
    if (r)
    {
        printf("%c", r->d);
        preorder(r->lchild);
        preorder(r->rchild);
    }
}

int one(Tnode *r)
{
    if ((r == NULL) || (!r->lchild) && (!r->rchild))
    {
        return 0;
    }
    if ((r->lchild) && (r->rchild))
    {
        return one(r->lchild) + one(r->rchild);
    }
    else
    {
        return 1 + one(r->lchild) + one(r->rchild);
    }
}

int two(Tnode *r)
{
    if ((r == NULL) || (!r->lchild) && (!r->rchild))
    {
        return 0;
    }
    if ((r->lchild) && (r->rchild))
    {
        return 1 + two(r->lchild) + two(r->rchild);
    }
    else
    {
        return two(r->lchild) + two(r->rchild);
    }
}


int check(Tnode *t)  //递归遍历二叉树是否为二叉排序树
{
	if(!t)        //空二叉树情况
		return 1;
	else if(!(t->lchild) && !(t->rchild))   //左右子树都无情况
		return 1;
	else if((t->lchild) && !(t->rchild))    //只有左子树情况
	{
		if(t->lchild->d>t->d)
			return 0;
		else
			return check(t->lchild);
	}
	else if((t->rchild) && !(t->lchild))   //只有右子树情况
	{
		if(t->rchild->d<t->d)
			return 0;
		else
			return check(t->rchild);
	}
	else         //左右子树全有情况
	{                                
		if((t->lchild->d>t->d) || (t->rchild->d<t->d))
			return 0;
		else
			return ( check(t->lchild) && check(t->rchild) );
	}
}


void main()
{
    Tnode *r = NULL;
    char in[MAX], post[MAX];
    printf("请输入中序序列:");
    gets(in);
    printf("\n请输入后序序列:");
    gets(post);
    MK(in, 0, strlen(in) - 1, post, 0, strlen(post) - 1, &r);
    printf("\n该二叉树的前序遍历序列为:");
    preorder(r);
    printf("\n\n该二叉树的一度结点个数为:%d\n",one(r));
    printf("\n该二叉树的二度结点个数为:%d\n",two(r));
    printf("\n该二叉树是否为二叉排序树(若是输出Yes,否则输出No):\n");
    if (check(r))
    {
        printf("Yes\n");
    }
    else
    {
        printf("No\n");
    }
}


 

 

 

python二叉树遍历、求深度、已知前序中序 求树 求后序 已知前序中序 求二叉树 阅读详情

相关推荐

异次元发卡最新漏洞0day(XSS组合拳)

异次元商店头像上传处存在存储型XSS注入(user、admin均存在)。其中,user处有过滤,admin无。 将恶意脚本插入后,管理员访问用户管理页面即可执行恶意脚本。 恶意脚本执行后,会新增一个管理员用户,进而获得权限。鉴于漏洞还没有泛滥,而且很多站都有漏洞。EXP暂时不公开。需要学习可以加入知识星球

白昼小丑的博客 4584

c语言二叉树已知中序遍历和后序遍历求先序遍历,已知二叉树的中序遍历和后序遍历,求先序遍历...

可以跟之前这篇形成对比http://blog.youkuaiyun.com/hhooong/article/details/43195395代码如下:#include#includeusing namespace std ;struct BinTreeNode {char data ;BinTreeNode *left ;BinTreeNode *right ;};void BinTreeSuccess(ch...

weixin_35084652的博客 1040

Allegro网表导入报错VOIDs not allowed in parent SHAPE的解决方案

在PCB设计流程中,网表导入是确保电气连接正确传递的关键步骤。其原理是将原理图的逻辑连接关系映射到物理版图的图形数据库中。这一过程的技术价值在于保证设计数据的一致性,避免后续生产中出现电气错误。然而,在Cadence Allegro等EDA工具的实际应用中,数据库内部状态的不一致可能引发操作失败,例如常见的“VOIDs are not allowed in the parent SHAPE”报错。这类问题通常源于多人协作、跨版本操作或频繁编辑后积累的数据结构冗余。针对此场景,核心的解决方法是执行Databa

weixin_30954817的博客 318

已知一个二叉树的中序遍历序列和后序遍历序列,求这棵树的前序遍历序列

【问题描述】 已知一个二叉树的中序遍历序列和后序遍历序列,求这棵树的前序遍历序列。 【输入形式】 一个树的中序遍历序列 该树后序遍历序列,中间用空格分开。输入序列中仅含有小写字母,且没有重复的字母 【输出形式】 一个树的前序遍历序列 【样例输入】 dbeafcg debfgca 【样例输出】 abdecfg #include<stdio.h> #include<stdlib.h> #include<cstring> #include<string> #incl

qq_45670253的博客 3332

Hifiasm参数调优实战:当N50不理想时的7个排查方向与解决方案

本文详细解析了Hifiasm参数调优实战,针对基因组组装中N50不理想的7个排查方向与解决方案。通过调整--hom-cov、-D、-N等核心参数,结合HiFi数据和参考基因组分析,有效提升组装质量。文章以猪毛菜基因组为例,展示了从2.1MB到4.3MB的N50优化过程,为生物信息学研究者提供实用指南。

weixin_30642561的博客 425

强化学习新手上路:用PPO-Clip轻松玩转Pendulum-v1(PyTorch保姆级教程)

本文提供了一份基于PyTorch的PPO-Clip算法实战教程,指导强化学习新手在Pendulum-v1环境中构建连续控制智能体。教程详细解析了PPO-Clip的核心机制,特别是其Clip机制如何限制策略更新幅度以确保训练稳定,并涵盖了从环境配置、策略网络设计、经验收集到完整训练框架搭建的全过程,是掌握连续动作空间强化学习的实用指南。

weixin_29062963的博客 270

根据二叉树的中序和后序遍历,求前序遍历

先构建二叉树,后进行中序遍历#include #include using namespace std; typedef struct no{ char data; struct no *lchild,*rchild; }*node; void create(node&sa,string in,string post) { if(in.length()==0) return; sa

老鼠 2707

保姆级QFIL线刷教程:从驱动安装到成功刷机的完整避坑指南(Win10/11实测)

本文提供了一份详细的QFIL线刷教程,涵盖从驱动安装到成功刷机的完整流程,特别针对Win10/11系统进行了实测。文章重点解决了EDL模式下的常见问题,如Download Fail和COM Port识别错误,并提供了实用的避坑技巧和故障排除方案,帮助用户实现零失误操作。

weixin_29245767的博客 762

二叉树-根据中序遍历和后序遍历求前序遍历

题目描述 给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度\le 8≤8)。 输入格式 22行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。 输出格式 11行,表示一棵二叉树的先序。 输入输出样例 输入 #1 BADC BDCA 输出 #1 ABCD 说明/提示 【题目来源】 NOIP 2001 普及组第三题 这题很简单,递归就行 #include<bits/stdc++.h> #define max 10 using namespace s

Galaxy 1197

xxl-job快速入门(最全)

某电商平台需要每天上午10点,下午3点,晚上8点发放一批优惠券某银行系统需要在信用卡到期还款日的前三天进行短信提醒某财务系统需要在每天凌晨0:10分结算前一天的财务数据,统计汇总以上场景就是任务调度所需要解决的问题任务调度是为了自动完成特定任务,在约定的特定时刻去执行任务的过程XXL-Job:是大众点评的分布式任务调度平台,是一个轻量级分布式任务调度平台, 其核心设计目标是开发迅速、学习简单、轻量级、易扩展大众点评目前已接入XXL-JOB,该系统在内部已调度约100万次,表现优异。

gnwu1111的专栏 1699

Darknet-Yolov3 移植过程

本教程面向使用寒武纪平台进行深度学习推理任务的开发者。针对当前主流检测网络darknet-yolov3,进行寒武纪平台的移植。开发者对照移植过程,能够利用寒武纪智能处理器设备完成多种场景的目标检测任务。本实验代码基于 Neuware 1.6.1 与 Python 2.7 环境。

shengyin714959的博客 438

二叉树已知后序与中序输出前序

这是已知二叉树后序遍历数组和中序遍历数组的情况下,采用递归算法实现前序遍历数组的输出 #include<bits/stdc++.h> using namespace std; int post[999],in[999]; void pre(int root,int start,int end){//root是整棵树在后...

天上的人我是谁的博客 825

「PAT乙级真题解析」Basic Level 1034 有理数四则运算 (问题分析+完整步骤+伪代码描述+提交通过代码)

题设给定两个有理数, 要求输出这两个有理数的和、差、积、商。 如果只是这样, 则问题很简单, 但是题设要求输出的每个有理数必须是最简形式. **所以本题的一个重点是如何将有理数转为题设要求的有理数.**

过美好生活,做高效程序员 3129

二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)

二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序) 之前的一篇随笔(二叉树、前序遍历、中序遍历、后序遍历)只对二叉树的遍历进行了笼统的描述,这篇随笔重点对前、中、后序的遍历顺序进行分析 二叉树的遍历 二叉树的深度优先遍历可细分为前序遍历、中序遍历、后序遍历,这三种遍历可以用递归实现(本篇随笔主要分析递归实现),也可使用非递归实现的 前序遍历:根节点->左子树->右子树(根->左->右) 中序遍历:左子树->根节点->右子树(左-..

u010029439的博客 1530

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

二叉树前序中序后续线索树_二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)...

之前的一篇随笔(二叉树、前序遍历、中序遍历、后序遍历)只对二叉树的遍历进行了笼统的描述,这篇随笔重点对前、中、后序的遍历顺序进行分析二叉树的遍历二叉树的深度优先遍历可细分为前序遍历、中序遍历、后序遍历,这三种遍历可以用递归实现(本篇随笔主要分析递归实现),也可使用非递归实现的前序遍历:根节点->左子树->右子树(根->左->右)中序遍历:左子树->根节点->右子...

weixin_32900811的博客 621

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

已知二叉树前序、后序遍历如何求中序

已知二叉树的两种遍历求第三种遍历。      已知前序和中序求后序,已知后序和中序求前序,这两种解法网上有很多,但是已知前序和后序求中序的解法我没找到,这里写一个自己的想法,有可能大家已经想到了我没有搜索到而已      首先,我们看看前序、中序、后序遍历的特性:  前序遍历:      1.访问根节点      2.前序遍历左子树      3.前序遍历右子树  中序遍历:

Crimson_pig的博客 6842

二叉树遍历(已知前序,中序,求后序遍历)java

题目描述 二叉树的前序、中序、后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树; 中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树; 后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。 给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。 输入 两个字符串,其长度n均小...

weixin_41499217的博客 993

二叉树遍历之已知前序中序求后序

二叉树根据前序中序求后序

飘羽逸狂 904

二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)...

之前的一篇随笔(二叉树、前序遍历、中序遍历、后序遍历)只对二叉树的遍历进行了笼统的描述,这篇随笔重点对前、中、后序的遍历顺序进行分析 二叉树的遍历 二叉树的深度优先遍历可细分为前序遍历、中序遍历、后序遍历,这三种遍历可以用递归实现(本篇随笔主要分析递归实现),也可使用非递归实现的 前序遍历:根节点->左子树->右子树(根->左->右) 中序遍历:左子树-&...

weixin_30296405的博客 637

关于二叉树的问题1-已知前序,中序求后序遍历

关于二叉树的问题1-已知前序,中序求后序遍历 对于一棵二叉树而言,可以由其前序和中序或者中序和后序的遍历序列,确定一棵二叉树。 那么对于已知前序和中序序列,求后序序列也就是先还原二叉树,然后对其进行后序遍历即可。 二叉树结点的结构定义如下: struct ...

dichuangheng8094的博客 167

3598. 二叉树遍历 已知前序 中序 求后序遍历

这些参数的取值是为了确保正确地从原始的前序遍历和中序遍历字符串中提取出左子树和右子树对应的部分。这样,递归调用postOrder函数时,可以正确地处理每个子树。

2303_79132118的博客 610

二叉树遍历(已知前序和后序遍历,求中序遍历的可能的序列数)

题目描述Description 我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树: 所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相...

我要出家当道士 3万+

已知二叉树的前序,中序,后序遍历中的两个,求另一个

已知有一棵树,知道其前序,中序序列,求后序序列 PreOrder:         GDAFEMHZ InOrder:            ADEFGHMZ 求得: PostOrder:       AEFDHZMG 分析:已知先序序列中的先后顺序就是根出现的顺序,因为 先序序列是首先访问根节点,即先从先序序列中找到根节点G,然后到中序序列中找到G,

lidafoye的博客 767

已知二叉树的中序和后序遍历排列,求前序遍历

#include&lt;iostream&gt; #include&lt;string&gt; using namespace std; void Preorder(string inorder,string postorder) { if(inorder.size()&gt;0) { char ch=postorder[postorder.size()-1]; cout&lt;&l...

saplingyang的博客 3085

二叉树 前序中序后序遍历,已知前序中序遍历求后序 树结构,已知后序中序遍历求前序 树结构

(递归思想) 利用后序/前序遍历找到根节点->在中序里划分根节点的左右子树 ->找左/右子树的根节点->划分左右 ->…->… 根据前中后序遍历 前序遍历 ABCDEFGH 中序遍历 BDCEAFHG 后序遍历 DECBHGFA 已知前中求后(前中指前序遍历、后序遍历) 由前知,根节点A 由中分区BDCE | FHG 对于左区间(根节点的左子树), 由前知,根节点B 由中分区 | DCE //只有右子树 由前知,根节点C 由中分区 D | E 右边同理 根节点F

scdnplayer的博客 454
上一篇: 希尔排序算法
下一篇: 二叉树遍历:已知前序和中序,求后序
昨天与今天
博客等级 码龄17年 61粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值