关闭

重建二叉树

标签: 二叉树
167人阅读 评论(0) 收藏 举报
分类:
 
    重建二叉树

时间限制:1000 ms  |  内存限制:65535 KB
难度:3

描述
    题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!)。

输入
    输入有多组数据(少于100组),以文件结尾结束。
    每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法)。
输出
    每组输出数据单独占一行,输出对应得先序序列。
样例输入

    ACBFGED ABCDEFG
    CDAB CBAD

样例输出

    DBACEGF

    BCAD

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Node
{
	char date;
	struct Node *LChild;
	struct Node *RChild;
}BiNode,*BiTree;
void CreatTree(BiTree *root,char *s3,char *s2,int len)
{
	if(len == 0)
	{
		*root = NULL;
		return ;	
	}

	BiTree node = (BiTree)malloc(sizeof(BiNode));
	node->date = s3[len-1];
	node->LChild = node->RChild = NULL;
	*root = node;
	char *s1 = strchr(s2,node->date);//找到根节点在中序遍历中的位置 
	int leftlen = strlen(s2) - strlen(s1);
	int rightlen = len - 1 - leftlen;
	CreatTree(&(*root)->LChild,s3,s2,leftlen);
	CreatTree(&(*root)->RChild,s3+leftlen,s1+1,rightlen);
}
void PreOrder(BiTree root)
{
	if(root!=NULL)
	{
		printf("%c",root->date);
		PreOrder(root->LChild);
		PreOrder(root->RChild);
	}
}
int main()
{
	char s3[27],s2[27];
	while(scanf("%s %s",s3,s2)!=EOF)
	{
		BiTree root = NULL;
		CreatTree(&root,s3,s2,strlen(s3));
		PreOrder(root);
		printf("\n");
	}
	return 0;
}



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

剑指Offer面试题6(Java版):重建二叉树

题目:输入某二叉树的前序遍历和中序遍历的结果,请重新构造出该二叉树。假设输入的前序遍历和中序遍历的结果中不包含重复的数字。例如输入的前序遍历序列为{1,2,4,7,3,5,6,8}和中序遍历为{4,7...
  • jsqfengbao
  • jsqfengbao
  • 2015-07-27 18:36
  • 4874

数据结构:关于重建二叉树的三种思路

如果,告诉你有一棵二叉树前序遍历的结果为:ABC;中序遍历的结果为:BAC。我们可以很轻松地写出这棵二叉树就是以A为根节点、其左孩子是B、右孩子是C。那么从代码的角度,或者说是从算法的角度又要怎么来编...
  • u013761665
  • u013761665
  • 2015-11-24 00:27
  • 4701

POJ 2255 二叉树的重建

很不错的一道题目,t
  • he012
  • he012
  • 2014-07-21 10:48
  • 225

剑指offer--重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5...
  • kangaroo835127729
  • kangaroo835127729
  • 2015-04-10 22:57
  • 1977

编程之美--重建二叉树

给定一个前序和中序变量的结果,写一个算法重建这棵树:如: 前序: a b d c e f 中序:  d b a e c f 前序遍历的每一个节点,都是当前子树的根节点,同时,以对应的...
  • luyafei_89430
  • luyafei_89430
  • 2013-10-23 10:02
  • 6939

openjudge 重建二叉树3

建立二叉树3 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65535kB 描述 给出一颗二叉树每层节点的字符串表示,建立这颗二叉树,并输出中序遍历的结果。   输入 第一行输入一个...
  • kucece
  • kucece
  • 2015-06-05 20:21
  • 411

java实现重建二叉树

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,...
  • Bryan__
  • Bryan__
  • 2016-09-02 12:10
  • 1378

重建二叉树 C语言实现

主要根据编程之美中利用前序与中序遍历实现二叉树的重构。其中对于前序遍历中的每一个节点都是当前子树的根节点这一理论来对中序遍历进行划分。 并且也实现了根据中序遍历与后序遍历实现二叉树的重构,其中对于后...
  • yyme411
  • yyme411
  • 2013-11-08 20:01
  • 1108

Java笔记---剑指Offer(一:Java实现重建二叉树)

一、前言 最近正在准备找实习,因此拿起《剑指Offer》来看看,突击下自己的基础。但是《剑指Offer》上面的算法都是使用C语言,个人对C语言不熟悉,因此使用自己熟悉的Java来实现。嗯,以后要是机试...
  • GuLu_GuLu_jp
  • GuLu_GuLu_jp
  • 2016-03-09 11:15
  • 962

根据前序和中序重建二叉树

注意:1、仅根据前序和后序无法构建唯一的二叉树;2、二叉树前序遍历,第一个数字总是树的根节点的值;3、中序遍历中,根节点的值在序列的中间,左子树的值子在根节点的值得左边,右字树的值在根节点的值得右边;...
  • dutsoft
  • dutsoft
  • 2014-05-21 15:13
  • 946
    个人资料
    • 访问:52150次
    • 积分:2297
    • 等级:
    • 排名:第18838名
    • 原创:182篇
    • 转载:18篇
    • 译文:0篇
    • 评论:12条