二叉树-前序&中序

题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

# 返回构造的TreeNode根节点
def re_construct_binary_tree(pre, tin):
    if not pre or not tin:
        return None
    root = TreeNode(pre.pop())
    index = tin.index(root.val)
    root.left = self.reConstructBinaryTree(pre, tin[:index])
    root.right = self.reConstructBinaryTree(pre, tin[index + 1:])
    return root

  

原文地址:https://www.cnblogs.com/rnanprince/p/11588434.html

时间: 2024-10-31 18:03:55

二叉树-前序&中序的相关文章

hdu 1701 (Binary Tree Traversals)(二叉树前序中序推后序)

Binary Tree Traversals Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Description A binary tree is a finite set of vertices that is either empty or consists of a root r and two disjoint binary trees called

面试之路(11)-java递归和非递归二叉树前序中序后序遍历

二叉树的遍历 对于二叉树来讲最主要.最基本的运算是遍历. 遍历二叉树 是指以一定的次序访问二叉树中的每个结点.所谓 访问结点 是指对结点进行各种操作的简称.例如,查询结点数据域的内容,或输出它的值,或找出结点位置,或是执行对结点的其他操作.遍历二叉树的过程实质是把二叉树的结点进行线性排列的过程.假设遍历二叉树时访问结点的操作就是输出结点数据域的值,那么遍历的结果得到一个线性序列. 从二叉树的递归定义可知,一棵非空的二叉树由根结点及左.右子树这三个基本部分组成.因此,在任一给定结点上,可以按某种次

HDU_1710_二叉树前序中序确定后序

研究生考试初试结束一个周了,开始准备复试了,又要开始刷题了. 给定一个二叉树前序和中序,确定后序. #include<iostream> #include<cstdio> using namespace std; int pre[1005],in[1005]; void getPostOrder(int ph,int ih,int len,int flag) { if(len<1) return; int i; for(i=0; pre[ph]!=in[ih+i]; i++)

二叉树前序中序遍历求后序遍历

已知先序和中序遍历序列,求后序遍历序列. 已知该二叉树的先序遍历序列为:A-B-D-E-G-C-F,中序遍历序列为:D-B-G-E-A-C-F. 接下来我们就可以求出该二叉树的后序遍历序列,具体步骤如下: 第一步:先求root根节点,根据先序遍历规则我们可知root为先序遍历序列的第一个节点,因此该二叉树的root节点为A. 第二步:求root的左子树和右子树,这点我们可以从中序遍历序列中找出,位于root节点A左侧的D-B-G-E为root的左子树,位于A右侧的C-F为右子树. 第三步:求ro

POJ2255-已知二叉树前序中序求后序

水题--也可以不建立二叉树来做 如果pre[pl:pr]对应in[il:ir],那么pre[pl]是这棵树的根,它在in的位置记为root,显然root在[il,ir]内 那么二叉树的左子树是in[il:root-1],也即pre[pl+1:pl+root-il] 二叉树的右子树是in[root+1,ir],也即pre[pl+root-il+1:pr] 按照左子树-右子树-树根的后序遍历方式输出即可 附代码 #include <string> #include <iostream>

PAT A1086 Tree Traversals Again [二叉树前序中序求后序]

题目描述 链接 用栈的形式给出一棵二叉树的建立的顺序,求这棵二叉树的后序遍历 分析 性质:树的先序等于入栈次序,树的中序遍历等于出栈次序 先序:先访问根再入栈,所以入栈次序就是先序遍历次序 中序:先递归访问左子树,回溯时访问根,回溯时即出栈时,所以出栈次序就是中序遍历 所以问题转换为已知先序中序,求后序 已知先序中序求后序的方法 \(root\) 保存先序中根的位置,\(st\),\(ed\) 为中序子树的起始结束位置 遍历中序,找到中序根的位置\(i\),从而分成左右子树 左子树在先序中根的位

二叉树的前序中序后序遍历相互求法

二叉树的前中后序遍历,他们的递归非递归.还有广度遍历,参见二叉树的前中后序遍历迭代&广度遍历和二叉树的前中后序遍历简单的递归 现在记录已知二叉树的前序中序后序遍历的两个,求另外一个.一般,这两个中一定有中序遍历. 1.已知前序和中序,求后序遍历: 前序:ABDECFG  中序:DBEAFCG 思路简单:前序的第一个节点就是根节点, 中序中找到根节点的位置,根节点之前是其左子树,之后是右子树   按此顺序,依次在左子树部分遍历,右子树部分遍历 C++ 代码: TreeNode *BinaryTre

hihocoder(第十周)二叉树(前序中序推后续)递推实现

题目 : 后序遍历 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在参与过了美食节之后,小Hi和小Ho在别的地方又玩耍了一阵子,在这个过程中,小Ho得到了一个非常有意思的玩具——一棵由小球和木棍连接起来的二叉树! 小Ho对这棵二叉树爱不释手,于是给它的每一个节点都标记了一个标号——一个属于A..Z的大写字母,并且没有任意两个节点的标号是一样的.小Hi也瞅准了这个机会,重新巩固了一下小Ho关于二叉树遍历的基础知识~就这样,日子安稳的过了两天. 这天,小Ho正好在求解

华南理工数据结构大作业第二题 二叉树各种操作深度结点个数后序前序中序层次求祖先

/*#include<iostream> #include<windows.h> using namespace std ; struct BTNode { char data ; BTNode *left ; BTNode *right ; BTNode () { left = NULL ; right = NULL ; } } ; int main () { cout <<"题目所给的二叉树用括号表示法后表示为:A(B(D,E(H(J,K(L,M(,N))