结点结构

typedef struct Node{char data;struct Node *left;struct Node *right;
}Node;

已知前序和后序遍历,建立二叉树(不唯一,一种可能的结果即可)

问题的关键在于如何把前序和后序划分出左右子树。其实只要划分出左子树就行(剩下的就是根结点和右子树):

  1. 前序提供左子树根节点 pre[pre_start+1]
  2. 在后序中找到左子树根节点的位置 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;}
}

[算法] 已知前序和后序遍历,建立二叉树相关推荐

  1. [算法] 已知前序和中序遍历,建立二叉树

    结点结构 typedef struct Node{char data;struct Node *left;struct Node *right; }Node; 已知前序和中序遍历顺序,建立二叉树 问题 ...

  2. 二叉树前序中序后序_leetcode889_go_根据前序和后序遍历构造二叉树

    leetcode889_根据前序和后序遍历构造二叉树 01 - 题目 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值是不同的正整数. 示例:输入:pre = [1,2, ...

  3. [Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]

    [问题描述][中等] [解答思路] copyOfRange class Solution {public TreeNode constructFromPrePost(int[] pre, int[] ...

  4. 根据前序和后序遍历构造二叉树(附前序中序代码)

    889. 根据前序和后序遍历构造二叉树 前序和中序 道理相同 改变一些细节就可以了,在最后附上了前序中序的代码 题目描述 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值 ...

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

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

  6. 已知前序(后序)遍历序列和中序遍历序列构建二叉树(Leetcode相关题目)

    1.文字描述: 已知一颗二叉树的前序(后序)遍历序列和中序遍历序列,如何构建这棵二叉树? 以前序为例子: 前序遍历序列:ABCDEF 中序遍历序列:CBDAEF 前序遍历先访问根节点,因此前序遍历序列 ...

  7. 从前中后序遍历构造二叉树,三题无脑秒杀

    如果只是前中后序遍历的其中一种,是不可能唯一确定一个二叉树的,必须是其中两个的结合,由此便产生了三道题目,在这里可以全部秒杀. 需要记住的要点是: 前序(根左右)--第一个节点一定是根节点: 中序(左 ...

  8. [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 ...

  9. java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...

    前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...

最新文章

  1. 舒服了,微信支持多设备同时在线!
  2. docker 推送镜像到私有地址
  3. 并发编程-21J.U.C组件拓展之Future和FutureTask
  4. android的帧布局,七、Android帧布局FrameLayout和霓虹灯效果
  5. 需要某个字体包才能正确显示此页面_[三分钟小文]前端性能优化-页面加载速度优化...
  6. 模型预测控制的缺点_【电子技术】【2018.01】模型预测控制FPGA实现的协同设计...
  7. 波段顶底 tdx 副图指标
  8. 微信公众号开发 包括服务器配置、java web项目搭建、tomcat手动发布web项目、微信开发所需的url和token验证 2017.12.2...
  9. 我是 LinkedIn 的 SRE ,我把 LinkedIn 搞挂了
  10. 西门子S7-1200的PID应用(恒温热水器)
  11. 一篇极好的 CSS 教程 (ZZ)
  12. Matplotlib饼状图
  13. 33种化学原理动图, 让你秒懂化学反应原理!
  14. html5远程桌面 微软,微软正在测试远程桌面HTML5网页版本客户端!
  15. Arcpy处理月NDVI,最大合成法合成年NDVI
  16. python歌词图表分析_Python可视化图分析毛不易的《入海》,看看听歌的人都在想些什么...
  17. Android源码分析工具及方法
  18. 关键链项目管理方法的缓冲区管理
  19. align-content 和align-items的区别
  20. AndroidStudio电子书的实现

热门文章

  1. AfxMessageBox
  2. 计算机专项能力局域网管理,全国计算机信息技术考试局域网管理(Windows NT平台)管理员级考试考试大纲...
  3. java mybatis分页查询语句_mybatis分页查询的实现(一)
  4. lettuce配置_skywalking与lettuce哨兵模式
  5. ios传感器应用开发最佳实践_同构 javascript 应用开发的最佳实践(Four)
  6. extjs grid显示html,Extjs grid column里添加button等html标签,并增加点击事件
  7. php中获取随机数的方法,PHP实现获取随机数的方法
  8. lua代码格式化工具_lua的代码覆盖率工具
  9. 计算机组成原理 第三章 存储系统
  10. 【caffe-windows】 caffe-master 之 卷积核可视化(利用matlab)