数据结构---前序和中序遍历的二叉树序列还原二叉树
数据结构—前序和中序遍历的二叉树序列还原二叉树
代码:
#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)
如果存在什么问题,欢迎批评指正!谢谢!
数据结构---前序和中序遍历的二叉树序列还原二叉树相关推荐
- java根据前序和中序建树_(Java实现)二叉树---根据前序、中序、后序数组还原二叉树...
概述在上一篇文章中讲到顺序存储二叉树,一般是用于完全二叉树,通过统一的数学公式可以将数组还原成完全二叉树 而对于普通的二叉树来说,也可以根据前序.中序和后序遍历得到的数组,还原二叉树 还原还原的情况分 ...
- 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)
引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...
- 数据结构---后序和中序遍历的二叉树序列还原二叉树
数据结构-后序和中序遍历的二叉树序列还原二叉树 代码: #include<stdio.h> #include<stdlib.h> typedef struct bstTree ...
- Java——从前序与中序遍历序列构造二叉树
文章目录 前言 一.已知前序和中序构造二叉树,并层次输出 二.问题分析 1.构造二叉树 2.层次遍历二叉树 三.总结 前言 算法分析--分治法 一.已知前序和中序构造二叉树,并层次输出 二.问题分析 ...
- 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...
- [leetcode] 105.从前序与中序遍历构造二叉树
给定一棵树的前序遍历 preorder 与中序遍历 inorder.请构造二叉树并返回其根节点. 示例 1: Input: preorder = [3,9,20,15,7], inorder = [ ...
- LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++...
LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++ Given preo ...
- [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]
[问题描述][中等] 根据一棵树的前序遍历与中序遍历构造二叉树.注意: 你可以假设树中没有重复的元素.例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...
- 二叉树 中序遍历 python_LeetCode 105 树 从前序与中序遍历序列构造二叉树(Medium)
17(105) 从前序与中序遍历序列构造二叉树(Medium) 描述 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 示例 例如,给出前序遍历 preorder = ...
最新文章
- R-Bioconductor安装
- 配置nfs服务器出现的问题
- 多个反斜杠的消除处理
- iOS应用跳转qq指定联系人聊天
- Python中的负索引是什么?
- python3入门与进阶笔记_16_变量进阶 — 黑马程序员《Python入门教程完整版》笔记...
- 在多线程中使用UDP
- 班级日常分享,一天一瞬间
- .Net中应用XML动态生成窗体
- MSSQL自动备份数据库(转载)
- (C语言)用C语言编写小游戏——三子棋
- Arduino驱动的安装
- 磁滞回线与软磁材料和硬磁材料的关系
- 多项式求值秦九韶算法
- 软工网络15团队作业4——Alpha阶段敏捷冲刺之Scrum 冲刺博客(Day2)
- 快排C语言三种实现方法(大同小异)
- 业内人士给龙年买房人的15条忠告 看到的有福了
- linux 查看磁盘分区格式
- php reader oleread,使用phpExcelReader读取excel文件
- Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: FUNCTION wm.concat does not exist
热门文章
- linux c之fdopen(int fd, const char *type)使用总结
- Andorid之教你全手工去除定制软件
- sql LEFT JOIN RIGHT JOIN(左连接)(mysql)
- java 获取接口的注解_java反射注解妙用-获取所有接口说明
- javaweb连接不上mysql怎么办_java web应用连接mysql会突然connection连接失败
- 震撼!豆瓣评分9.3,这部纪录片带你感受生命之重!
- java ready_Java PushbackReader ready()用法及代码示例
- python从入门到实践django_Django入门——《Python编程从入门到实践》
- vscode函数跳转插件_人生苦短,我们为 Cocos Creator 开发的插件和工具
- c语言字符比较思路,C语言讲解思路资料