[算法] 已知前序和后序遍历,建立二叉树
结点结构
typedef struct Node{char data;struct Node *left;struct Node *right;
}Node;
已知前序和后序遍历,建立二叉树(不唯一,一种可能的结果即可)
问题的关键在于如何把前序和后序划分出左右子树。其实只要划分出左子树就行(剩下的就是根结点和右子树):
- 前序提供左子树根节点
pre[pre_start+1]
- 在后序中找到左子树根节点的位置
post_left_root_pos
,即可获得左子树的长度。
int find(char str[], char x, int start, int end){for(int k = start; k < end; k++){if(str[k] == x)return k;}return -1;
}Node* CreateFrom3(char pre[], char post[], int pre_start, int pre_end, int post_start, int post_end){if(pre_start >= pre_end || post_start >= post_end)return NULL;else if(pre_start + 1 == pre_end && post_start + 1 == post_end && pre[pre_start] == post[post_start]){Node* p = (Node*)malloc(sizeof(Node));p->data = pre[pre_start];p->left = NULL;p->right = NULL;return p;}else{char root_data = pre[pre_start];char left_root_data = pre[pre_start + 1];int post_left_root_pos = find(post, left_root_data, post_start, post_end);int left_len = post_left_root_pos - post_start + 1;int right_len = post_end - left_len - 1;Node* root = (Node*)malloc(sizeof(Node));Node* left = CreateFrom3(pre, post, pre_start + 1, pre_start + left_len + 1, post_start, post_left_root_pos + 1);Node* right= CreateFrom3(pre, post, pre_start + left_len + 1, pre_end, post_left_root_pos + 1, post_end - 1);root->data = root_data;root->left = left;root->right = right;return root;}
}
[算法] 已知前序和后序遍历,建立二叉树相关推荐
- [算法] 已知前序和中序遍历,建立二叉树
结点结构 typedef struct Node{char data;struct Node *left;struct Node *right; }Node; 已知前序和中序遍历顺序,建立二叉树 问题 ...
- 二叉树前序中序后序_leetcode889_go_根据前序和后序遍历构造二叉树
leetcode889_根据前序和后序遍历构造二叉树 01 - 题目 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值是不同的正整数. 示例:输入:pre = [1,2, ...
- [Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]
[问题描述][中等] [解答思路] copyOfRange class Solution {public TreeNode constructFromPrePost(int[] pre, int[] ...
- 根据前序和后序遍历构造二叉树(附前序中序代码)
889. 根据前序和后序遍历构造二叉树 前序和中序 道理相同 改变一些细节就可以了,在最后附上了前序中序的代码 题目描述 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值 ...
- LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++...
LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++ Given preo ...
- 已知前序(后序)遍历序列和中序遍历序列构建二叉树(Leetcode相关题目)
1.文字描述: 已知一颗二叉树的前序(后序)遍历序列和中序遍历序列,如何构建这棵二叉树? 以前序为例子: 前序遍历序列:ABCDEF 中序遍历序列:CBDAEF 前序遍历先访问根节点,因此前序遍历序列 ...
- 从前中后序遍历构造二叉树,三题无脑秒杀
如果只是前中后序遍历的其中一种,是不可能唯一确定一个二叉树的,必须是其中两个的结合,由此便产生了三道题目,在这里可以全部秒杀. 需要记住的要点是: 前序(根左右)--第一个节点一定是根节点: 中序(左 ...
- [LeetCode] Construct Binary Tree from Preorder and Inorder Traversal 由先序和中序遍历建立二叉树...
Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume that ...
- java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...
前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...
最新文章
- 舒服了,微信支持多设备同时在线!
- docker 推送镜像到私有地址
- 并发编程-21J.U.C组件拓展之Future和FutureTask
- android的帧布局,七、Android帧布局FrameLayout和霓虹灯效果
- 需要某个字体包才能正确显示此页面_[三分钟小文]前端性能优化-页面加载速度优化...
- 模型预测控制的缺点_【电子技术】【2018.01】模型预测控制FPGA实现的协同设计...
- 波段顶底 tdx 副图指标
- 微信公众号开发 包括服务器配置、java web项目搭建、tomcat手动发布web项目、微信开发所需的url和token验证 2017.12.2...
- 我是 LinkedIn 的 SRE ,我把 LinkedIn 搞挂了
- 西门子S7-1200的PID应用(恒温热水器)
- 一篇极好的 CSS 教程 (ZZ)
- Matplotlib饼状图
- 33种化学原理动图, 让你秒懂化学反应原理!
- html5远程桌面 微软,微软正在测试远程桌面HTML5网页版本客户端!
- Arcpy处理月NDVI,最大合成法合成年NDVI
- python歌词图表分析_Python可视化图分析毛不易的《入海》,看看听歌的人都在想些什么...
- Android源码分析工具及方法
- 关键链项目管理方法的缓冲区管理
- align-content 和align-items的区别
- AndroidStudio电子书的实现
热门文章
- AfxMessageBox
- 计算机专项能力局域网管理,全国计算机信息技术考试局域网管理(Windows NT平台)管理员级考试考试大纲...
- java mybatis分页查询语句_mybatis分页查询的实现(一)
- lettuce配置_skywalking与lettuce哨兵模式
- ios传感器应用开发最佳实践_同构 javascript 应用开发的最佳实践(Four)
- extjs grid显示html,Extjs grid column里添加button等html标签,并增加点击事件
- php中获取随机数的方法,PHP实现获取随机数的方法
- lua代码格式化工具_lua的代码覆盖率工具
- 计算机组成原理 第三章 存储系统
- 【caffe-windows】 caffe-master 之 卷积核可视化(利用matlab)