按照前序遍历和中序遍历构建二叉树
转载自:http://blog.csdn.net/sbitswc/article/details/26433051
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
_______7______/ \__10__ ___2/ \ /4 3 _8\ /1 11
preorder = {7,10,4,3,1,2,8,11} inorder = {4,10,3,1,7,11,8,2}
The first node in preorder alwasy the root of the tree. We can break the tree like:
1st round:
preorder: {7}, {10,4,3,1}, {2,8,11}
inorder: {4,10,3,1}, {7}, {11, 8,2}
_______7______/ \{4,10,3,1} {11,8,2}
2nd round
left part right part
preorder: {10}, {4}, {3,1} {2}, {8,11}
inorder: {4}, {10}, {3,1} {11,8}, {2}
_______7______/ \__10__ ___2/ \ /4 {3,1} {11,8}
Same way to split {3,1} and {11,8}, yo will get the complete tree now.
_______7______/ \__10__ ___2/ \ /4 3 _8\ /1 11
c++
- TreeNode *BuildTreePI(
- vector<int> &preorder,
- vector<int> &inorder,
- int p_s, int p_e,
- int i_s, int i_e){
- if(p_s > p_e) return NULL;
- int pivot = preorder[p_s];
- int i = i_s;
- for(;i<i_e;i++){
- if(inorder[i] == pivot)
- break;
- }
- int length1 = i-i_s-1;
- int length2 = i_e-i-1;
- TreeNode* node = new TreeNode(pivot);
- node->left = BuildTreePI(preorder,inorder,p_s+1,length1+p_s+1,i_s, i-1);
- node->right = BuildTreePI(preorder, inorder, p_e-length2, p_e, i+1, i_e);
- return node;
- }
- TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
- return BuildTreePI(preorder,inorder,0,preorder.size()-1,0,inorder.size()-1);
- }
java
- public TreeNode buildTree(int[] preorder, int[] inorder) {
- return buildPI(preorder, inorder, 0, preorder.length-1, 0, inorder.length-1);
- }
- public TreeNode buildPI(int[] preorder, int[] inorder, int p_s, int p_e, int i_s, int i_e){
- if(p_s>p_e)
- return null;
- int pivot = preorder[p_s];
- int i = i_s;
- for(;i<i_e;i++){
- if(inorder[i]==pivot)
- break;
- }
- TreeNode node = new TreeNode(pivot);
- int lenLeft = i-i_s;
- node.left = buildPI(preorder, inorder, p_s+1, p_s+lenLeft, i_s, i-1);
- node.right = buildPI(preorder, inorder, p_s+lenLeft+1, p_e, i+1, i_e);
- return node;
- }
按照前序遍历和中序遍历构建二叉树相关推荐
- 通过前序遍历和中序遍历构建二叉树 python实现
前言 通过前序遍历和中序遍历构建二叉树的原理,主要是找前序遍历根节点在中序遍历中的位置,然后将二叉树而成左子树和右子树,然后依次进行这样的操作,思路还是比较简单的 代码 class Node:def ...
- java根据前序和中序建树_Java实现根据前序遍历构建二叉树(前序遍历、中序遍历、后序遍历)...
Java实现根据前序遍历构建二叉树(前序遍历.中序遍历.后序遍历),Java关于ACM的代码真的好少,想参考如何用java实现二叉树googl 前言 Java关于ACM的代码真的好少,想参考如何用ja ...
- 根据二叉树前序遍历和中序遍历重建二叉树
剑指 Offer 07. 重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如,给出 前序遍历 preorder = [3, ...
- 根据前序遍历和[中序遍历]
根据前序遍历和[中序遍历] 1. 递归法: 先序遍历:根节点→左子树→右子树. 中序遍历:左子树→根节点→右子树. 后续遍历:左子树→右子树→根节点. 根据前序遍历和中序遍历建立二叉树,根据以上性质可 ...
- 根据前序遍历和中序遍历创建二叉树
根据前序遍历和中序遍历创建二叉树 题目要求如下: 给定某一个二叉树的前序遍历和中序遍历,要求据此创建一颗符合这样遍历顺序的二叉树. 前序遍历和中序遍历的概念以及特性: 前序遍历:先遍历节点本身,再遍历 ...
- python实现二叉树的重建1 之由前序遍历和中序遍历重建
前言 此题是关于树的面试题目的常见题型,题目的含义很清晰,这个就不用多说了 解法 关于这道题的解法有很多不同的样式,通用的解法是这样的: 假如现在我们有如下两个遍历的情况 preorder: [1, ...
- 根据二叉树的前序遍历和中序遍历重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- python实现二叉树遍历(前序遍历、中序遍历、后序遍历)
python实现二叉树遍历(前序遍历.中序遍历.后序遍历) 在计算机科学中,二叉树是一种树数据结构,其中每个节点最多有两个子节点,称为左子节点和右子节点.使用集合理论概念的递归定义是(非空)二叉树是元 ...
- 前序遍历与中序遍历确定后序遍历
1003. 二叉树后序遍历 Total: 137 Accepted: 80 Time Limit: 3sec Memory Limit:256MB Des ...
- 二叉树的前序遍历,中序遍历,后序遍历学习 (原)
经验: 不要死记各个遍历节点的位置,将一个复杂的二叉树当作一个个小的二叉树学习前序遍历,中序遍历,后序遍历会更容易理解 转载于:https://www.cnblogs.com/gyrgyr/p/962 ...
最新文章
- APUE 学习笔记(一) Unix基础知识
- Docker之几种storage-driver比较
- BZOJ 3043 IncDec Sequence:反向差分
- 一键清除 打印机内无法清除作业
- 力扣1009.十进制整数的反码
- rm ,rm -rf , rm -f,rm -r 以及rm 命令的其他参数命令
- 使用异或解题 —— 序列中仅出现一次的两个数
- bzoj 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二(RMQ)
- CELL_TYPE_STRING cannot be resovled or is not a field
- icesat2:strong beam and weak beam
- Linux inittab和oracle lsntctl 启动的问题解决办法
- 向量叉积和点积混合运算_matlab中的向量的数量积和向量积
- 列举1000以内的水仙花数,并求出水仙花数的个数
- android 地址选择下载,选择走开下载-选择走开(吃饭位置选择)下载v1.0.4 安卓版-西西软件下载...
- php curl添加授权Authorization 验证头
- MATLAB批量修改图片名称
- HUE下载提示The number of resulting rows was too big to be downloaded
- 国内低代码开发平台发展现状
- matlab数理基础之 牛顿-莱布尼兹公式具体应用有哪些,用matlab如何实现
- 正则表达式的正数校验
热门文章
- java servlet https_javaweb项目对https的配置01
- 最诡异数学悖论:1+1=1
- 为什么睡觉时身体突然抖一下?答案吓到我了!
- 史上最硬核的数学老师!搞发明、造大炮,让战斗民族直叫爸爸,看完我跪了......
- 一文读懂 HMM 模型和 Viterbi 算法
- 哪种HTML列表会自动编号,HTML列表的种类
- gamaredon_Gamaredon组织某样本分析
- bytecode java_Java 字节码解读
- 程序显示文本框_【教程】TestComplete测试桌面应用程序教程(二)
- 下列选项中 采用边界值平滑_数据挖掘期末考题(答案).doc