数据结构—后序和中序遍历的二叉树序列还原二叉树

代码:

#include<stdio.h>
#include<stdlib.h>
typedef struct bstTree {char data;struct bstTree* lchild, *rchild;
}bstTree;
bstTree * reStoreTree(char* pre, int preSt, int preEnd, char *mid, int midSt, int midEnd) {//通过前序和中序二叉树遍历还原树if (preSt > preEnd) {return NULL;//如果找不到左子树了则返回NULL
}char rs = pre[preSt];int j;for (j = midSt; j <= midEnd; j++) {if (rs == mid[j]) {break;//在中序序列中找到当前的根节点}}if (j > midEnd) {printf("中序序列有误!\n");return NULL;//不再进行下面子树的操作}int gapLength = j - midSt;//左右子树跟结点的寻找范围bstTree* root = (bstTree*)malloc(sizeof(bstTree));root->data = rs;root->lchild = reStoreTree(pre, preSt + 1, preSt + gapLength, mid, midSt, j - 1);root->rchild = reStoreTree(pre, preSt + gapLength + 1, preEnd, mid, j + 1, midEnd);return root;
}
bstTree * reStoreTree1(char* last, int lastSt, int lastEnd, char *mid, int midSt, int midEnd) {//通过前序和中序二叉树遍历还原树if (lastSt > lastEnd) {return NULL;//如果找不到左子树了则返回NULL}char rs = last[lastEnd];int j;for (j = midSt; j <= midEnd; j++) {if (rs == mid[j]) {break;//在中序序列中找到当前的根节点}}if (j > midEnd) {printf("中序序列有误!\n");return NULL;//不再进行下面子树的操作}int gapLength = j - midSt;//左右子树跟结点的寻找范围bstTree* root = (bstTree*)malloc(sizeof(bstTree));root->data = rs;root->lchild = reStoreTree(last, lastSt, lastEnd - gapLength-1, mid, midSt, j - 1);root->rchild = reStoreTree(last, lastEnd - gapLength, lastEnd-1, mid, j + 1, midEnd);return root;
}
void prePrint(bstTree*  BSTTree) {//前序遍历二叉树if (BSTTree) {printf("%c ", BSTTree->data);prePrint(BSTTree->lchild);prePrint(BSTTree->rchild);}
}
int main() {char pre[4] = "ABC";char mid[4] = "BAC";char last[4] = "BCA";//bstTree* root = reStoreTree(pre, 0, 2, mid, 0, 2);//根据前序和中序构造的二叉树bstTree* root = reStoreTree1(last, 0, 2, mid, 0, 2);//根据后序和中序构造的二叉树printf("前序遍历根据后序和中序构造的二叉树\n");prePrint(root);//前序遍历二叉树printf("\n");system("pause");return 0;
}

测试截图:

时间复杂度O(n),空间复杂度O(logn)

c语言字符串的学习参考链接:https://blog.csdn.net/beyond_yourself/article/details/108889618

如果存在什么问题,欢迎批评指正!谢谢

数据结构---后序和中序遍历的二叉树序列还原二叉树相关推荐

  1. 数据结构---前序和中序遍历的二叉树序列还原二叉树

    数据结构-前序和中序遍历的二叉树序列还原二叉树 代码: #include<stdio.h> #include<stdlib.h> typedef struct bstTree ...

  2. 二叉树 BinaryTree (先序、中序、后序遍历 节点查找、插入、删除 完整类) Java数据结构与算法

    二叉树 BinaryTree (先序.中序.后序遍历 节点查找.插入.删除 完整类) Java数据结构与算法 源代码: view plain /** * * @author sunnyykn */ i ...

  3. //数据结构:先序、中序、后序遍历二叉树。输入数据:abd##eg###c#f#h##

    //数据结构:先序.中序.后序遍历二叉树.输入数据:abd##eg###c#f#h## #include <stdio.h> #include <stdlib.h> //定义数 ...

  4. 常考数据结构与算法:实现二叉树先序,中序和后序遍历

    题目描述 分别按照二叉树先序,中序和后序打印所有的节点. 输入 {1,2,3} 返回值 [[1,2,3],[2,1,3],[2,3,1]] import java.util.ArrayList;cla ...

  5. 数据结构-简单实现二叉树的先序、中序、后序遍历(java)

    第一步:创建一颗二叉树 public class Node { private int data;//数据域private Node leftNode;//左孩子private Node rightN ...

  6. 【数据结构笔记26】根据一棵树的先序/中序遍历Push与Pop内容,输出这棵树的先序、中序、后序遍历数组(不需要真的建立出树)

    本次笔记内容: 练习题-TTA.1 题意理解 练习题-TTA.2 核心算法 文章目录 题意理解 根据Push与Pop直接得出先序.中序数组 根据pre和in生成post C实现 题意理解 先来回忆非递 ...

  7. 【数据结构笔记10】二叉树的先序、中序、后序遍历,中序遍历的堆栈/非递归遍历算法,层序遍历,确定一个二叉树,树的同构

    本次笔记内容: 3.3.1 先序中序后序遍历 3.3.2 中序非递归遍历 3.3.3 层序遍历 3.3.4 遍历应用例子 小白专场:题意理解及二叉树表示 小白专场:程序框架.建树及同构判别 文章目录 ...

  8. 数据结构----二叉树已知先序和中序遍历序列求后序遍历

    说明 通过先序和中序或者中序和后序我们可以还原出原始二叉树,但是通过先序和后序是无法还原出原始二叉树也即是说,只有通过先序和中序,或者中序和后序我们才可以唯一的确定一个二叉树. 例子一 已知先序和中序 ...

  9. 左神算法:分别用递归和非递归方式实现二叉树先序、中序和后序遍历(Java版)

    本题来自左神<程序员代码面试指南>"分别用递归和非递归方式实现二叉树先序.中序和后序遍历"题目. 题目 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点 ...

最新文章

  1. android 字体像素转换工具类_Android中px与dip,sp与dip等的转换工具类
  2. 最长回文子串和回文链表
  3. delete表1条件是另一个表中的数据,多表连接删除
  4. pageadmin CMS网站建设教程:站点添加自定义字段
  5. 鲍捷 | 知识图谱从 0 级到 10 级简化版
  6. 单缸发动机扭矩动力学计算:理论计算virtual.lab motion仿真
  7. Django安装(for Mac)
  8. Element-UI中el-input输入值不显示
  9. nginx负载均衡核心模块(upstream和proxy模块)及常用参数介绍
  10. 爬虫(二)-创建项目应用
  11. android m是什么单位,M代表什么单位?
  12. PowerApps中应用如何显示用户详细信息
  13. SpringBoot 2.3 新特性之优雅停机
  14. 2005年10月--至今,开发过的项目
  15. Python中shape的用法
  16. bypass分流抢票(火车、高铁)
  17. win7记事本如何转换html,Win7打开记事本显示乱码是为什么?怎么才能正常?
  18. 你真的知道什么是置信区间吗?
  19. CentOS7-samba文件共享服务
  20. ios添加邮件收件服务器,iOS 系统邮件的基础使用

热门文章

  1. Android之screenOrientation属性
  2. Android之如何解决Listview里面的值出现了2次
  3. php stripslashes 去除反斜线
  4. fpga map测试_一种基于SELECTMAP的可配置且高速的FPGA配置电路及实现方法与流程
  5. python 读行为数组_python将多列文件读入数组
  6. 资料分享 | 数学建模竞赛备战大全
  7. html 使用ajax php函数吗,php – 为什么用AJAX加载html后jQuery更改函数不起作用?
  8. Java设置edittext光标,如何改变的EditText光标高度?
  9. bat脚本中获取上级目录_使用Python写一个可以监控Tomcat 运行的脚本,并且把.py文件转换成.exe文件...
  10. java创建计数器变量,用于检查变量(计数器)最大长度的Java方法