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

代码:

#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;
}
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";bstTree* root = reStoreTree(pre, 0, 2, mid, 0, 2);printf("前序遍历根据前序和中序构造的二叉树\n");prePrint(root);//前序遍历二叉树printf("\n");system("pause");return 0;
}

测试截图:

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

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

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

  1. java根据前序和中序建树_(Java实现)二叉树---根据前序、中序、后序数组还原二叉树...

    概述在上一篇文章中讲到顺序存储二叉树,一般是用于完全二叉树,通过统一的数学公式可以将数组还原成完全二叉树 而对于普通的二叉树来说,也可以根据前序.中序和后序遍历得到的数组,还原二叉树 还原还原的情况分 ...

  2. 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)

    引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...

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

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

  4. Java——从前序与中序遍历序列构造二叉树

    文章目录 前言 一.已知前序和中序构造二叉树,并层次输出 二.问题分析 1.构造二叉树 2.层次遍历二叉树 三.总结 前言 算法分析--分治法 一.已知前序和中序构造二叉树,并层次输出 二.问题分析 ...

  5. 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...

  6. [leetcode] 105.从前序与中序遍历构造二叉树

    给定一棵树的前序遍历 preorder 与中序遍历  inorder.请构造二叉树并返回其根节点. 示例 1: Input: preorder = [3,9,20,15,7], inorder = [ ...

  7. LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++...

    LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++ Given preo ...

  8. [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]

    [问题描述][中等] 根据一棵树的前序遍历与中序遍历构造二叉树.注意: 你可以假设树中没有重复的元素.例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...

  9. 二叉树 中序遍历 python_LeetCode 105 树 从前序与中序遍历序列构造二叉树(Medium)

    17(105) 从前序与中序遍历序列构造二叉树(Medium) 描述 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 示例 例如,给出前序遍历 preorder = ...

最新文章

  1. R-Bioconductor安装
  2. 配置nfs服务器出现的问题
  3. 多个反斜杠的消除处理
  4. iOS应用跳转qq指定联系人聊天
  5. Python中的负索引是什么?
  6. python3入门与进阶笔记_16_变量进阶 — 黑马程序员《Python入门教程完整版》笔记...
  7. 在多线程中使用UDP
  8. 班级日常分享,一天一瞬间
  9. .Net中应用XML动态生成窗体
  10. MSSQL自动备份数据库(转载)
  11. (C语言)用C语言编写小游戏——三子棋
  12. Arduino驱动的安装
  13. 磁滞回线与软磁材料和硬磁材料的关系
  14. 多项式求值秦九韶算法
  15. 软工网络15团队作业4——Alpha阶段敏捷冲刺之Scrum 冲刺博客(Day2)
  16. 快排C语言三种实现方法(大同小异)
  17. 业内人士给龙年买房人的15条忠告 看到的有福了
  18. linux 查看磁盘分区格式
  19. php reader oleread,使用phpExcelReader读取excel文件
  20. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: FUNCTION wm.concat does not exist

热门文章

  1. linux c之fdopen(int fd, const char *type)使用总结
  2. Andorid之教你全手工去除定制软件
  3. sql LEFT JOIN RIGHT JOIN(左连接)(mysql)
  4. java 获取接口的注解_java反射注解妙用-获取所有接口说明
  5. javaweb连接不上mysql怎么办_java web应用连接mysql会突然connection连接失败
  6. 震撼!豆瓣评分9.3,这部纪录片带你感受生命之重!
  7. java ready_Java PushbackReader ready()用法及代码示例
  8. python从入门到实践django_Django入门——《Python编程从入门到实践》
  9. vscode函数跳转插件_人生苦短,我们为 Cocos Creator 开发的插件和工具
  10. c语言字符比较思路,C语言讲解思路资料