数据结构重建二叉树

重建二叉树,知道先序和中序   输出二叉树的后序。。

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const int M = 1005;

int i,j,k;

int Max (int x ,int y)
{
return x>y?x:y ;
}

void build(int n,char *s1,char *s2)
{
    if(n<=0) return ;
    int p = strchr(s2,s1[0]) - s2; //找到根节点在中序遍历中的位置
    build(p,s1+1,s2);
    build(n-p-1,s1+p+1,s2+p+1);
    printf("%c",s1[0]);
}

int main ()
{
    char s1[30],s2[30];
    scanf("%s%s",s1,s2);
    int len = strlen(s1);
    build(len,s1,s2);

return 0;
}

下面是NYOJ上的数据结构的一道题,知道中序和后序 求先序。。之前看什么指针真是醉了,不过昨天复习数据结构的时候,还是将它用结构体和指针实现了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>

using namespace std;

const int M = 1005;

typedef struct BTNode
{
    char data;
    BTNode  *lchild,*rchild;
};

BTNode *Creat(char *post,char *in ,int n)
{
    BTNode *s;
    char r,*p;
    int k;
    if(n<=0) return NULL;
    r = *(post + n-1);
    s = (BTNode *)malloc(sizeof(BTNode));
    s->data = r;
    for(p=in;p<in+n;p++){
        if(*p == r) break;
    }
    k = p - in;
    s->lchild = Creat(post,in,k);
    s->rchild = Creat(post+k,p+1,n-k-1);
    return s;
}

void pre(BTNode *s)
{
    if(s!=NULL){
          printf("%c",s->data);
          pre(s->lchild);
          pre(s->rchild);

    }
}

int main ()
{
  char s1[30],s2[30];
  BTNode *p;
  while(scanf("%s%s",s1,s2)!=EOF){
  int len = strlen(s1);
 p = Creat(s1,s2,len);
  pre(p);
  printf("\n");
  }

return 0;
}
时间: 2024-08-10 15:53:03

数据结构重建二叉树的相关文章

【数据结构与算法】重建二叉树

只能根据前序中序或者中序后序重建二叉树,不可能根据前序和后序重建,因为需要中序去划分左右子树. 代码实现 /** * 源码名称:ConstructBT.java * 日期:2014-09-05 * 程序功能:重建二叉树(前序中序) * 版权:[email protected] * 作者:A2BGeek */ public class ConstructBT { class Node<T> { T mValue; Node<T> mLeft; Node<T> mRight

重建二叉树与二叉树的层次遍历

数据结构实验之求二叉树后序遍历和层次遍历 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历. 输入 输入数据有多组,第一行是一个整数t (t<1000).代表有t组測试数据.每组包含两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列. 输出 每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列 演示样例输

php数据结构之二叉树

树是一种比较重要的数据结构, 尤其是二叉树.二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之 分,其次序不能任意颠倒.二叉树是递归定义的,因此,与二叉树有关的题目基本都可以用递归思想解决,当然有些题目非递归解法也应该掌握,如非递归遍历节点 等等.本文努力对二叉树相关题目做一个较全的整理总结,希望对找工作的同学有所帮助. 二叉树节点定义如下: struct BinaryTreeNode { int m_nValue;

剑指offer试题——重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. # -*- coding:utf-8 -*- #定义了类,树节点,二叉树的节点,这里节点由三部分组成,值,左侧指针,右侧指针 # class TreeNode: # def __init__(self, x): # self.val = x # sel

剑指offer系列——重建二叉树

Q:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. C:时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M A: TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) { if (pr

第3章 结构之法——重建二叉树

重建二叉树 问题描述 分析与解法 用java实现的代码如下: 1 package chapter3jiegouzhifa.RebuildBinTree; 2 3 /** 4 * 重建二叉树 5 * 递归解法 6 * @author DELL 7 * 8 */ 9 public class RebuildBinTree { 10 //定义节点类 11 public static class Node{ 12 int left; //左子树位置 13 int right; //右子树位置 14 ch

数据结构:二叉树的链式存储

数据结构:二叉树的链式存储(C语言版) 1.写在前面 二叉树同样有两种存储方式,数组和链式存储,对于数组来说,我们利用二叉树的性质然后利用下标可以方便的找到一个节点的子节点和父节点. 二叉树的性质: 1.二叉树的第i层上至多有2i-1个节点 2.深度为K的二叉树至多有2k-1个节点 3.任何一个二叉树中度数为2的节点的个数必度数为0的节点数目少1. 说明:度数为0,为叶子节点. 4.具有n个节点的完全二叉树的深度为|_Log2N_|+1 5.若完全二叉树中的某节点编号为i,则若有左孩子编号为2i

根据二叉树的前序遍历和中序遍历重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. 1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(

【编程之美】java实现重建二叉树

package com.cn.binarytree.utils; /** * @author 刘利娟 [email protected] * @version 创建时间:2014年7月20日 下午2:03:30 类说明: */ class Node { Node left; Node right; char chValue; Node(char chValue) { left = null; right = null; this.chValue = chValue; } } public cla