根据中序和后序构造二叉树
来源:Python中,二叉树先序、中序、后序相互求法_DreamReverse的博客-CSDN博客_前序后序求中序python
第一步:输入中序:['c','b','d','a','f','e','g'];后序:['c','d','b','f','g','e','a'],判断后序列表是否为空?为空则结束二叉树的判断,否则从后序中获取根节点的值,并在中序中获取根节点的索引。将根节点后左孩子和右孩子分别存储在二叉树变量bt中。根节点可以直接存储,但是孩子可能是树不能直接存储需要进行判断,如果是树则需要进行树的解码,使用递归的方式进行。根节点1:a;左孩子1的中序是['c', 'b', 'd'],后序是['c', 'd', 'b'];右孩子1的中序是['f','e','g'],后序是['f','g','e']。输出bt1={"data":"a","left":待解析,"right":待解析}
第二步:对左孩子1进行二叉树的解析,根据中序和后序确定左孩子1的根节点和左右孩子。先判断左孩子1的后序是否为空,如果空则停止解析否则继续解析。同样的步骤,获取根节点以及左右孩子。根节点2:b;左孩子2:["c"],右孩子2:["d"]。输出bt2={"data":"b","left":待解析,"right":待解析}
第三步:然后继续进行解析左孩子2,判断后序不为空,其根节点:c,左右孩子为空返回。输出bt3={"data":"c","left":"","right":""}
第四步:解析右孩子2,根节点为d,左右孩子为空返回。输出bt4={"data":"d","left":"","right":""},到此左孩子1已经被解析完成输出bt1={"data":"a","left":{"data":"b","left":"c","right":"d"},"right":待解析}
以同样的步骤解析右孩子,将会得到bt1={"data":"a","left":{"data":"b","left":"c","right":"d"},"right":{"data":"e","left":"f","right":"g"}}
# This is a sample Python script.# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
from typing import Listimport osclass BinaryTree(object):def __init__(self, data, left = None, right = None):self.data = dataself.left = leftself.right = rightdef binary(last,center):if not last:returndate = last[-1];#获取根节点index = center.index(date)#获取中序中根节点的索引bt = BinaryTree(date)#生成储存变量,根节点,左树和右树print("last[:index]",last[:index])print("center[:index]", center[:index])bt.left = binary(last[:index],center[:index])print("last[index:-1]", last[index:-1])print("center[index+1:]", center[index+1:])bt.right = binary(last[index:-1],center[index+1:])return btdef showBinary(bt):if bt == None:returnprint(bt.data,end = " ")showBinary(bt.left)showBinary(bt.right)def main():center = ['c','b','d','a','f','e','g']last = ['c','d','b','f','g','e','a']bt = binary(last,center)showBinary(bt)if __name__ == '__main__':main()
根据中序和后序构造二叉树相关推荐
- 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...
- 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)
引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...
- leetcode 106. 从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树思考分析
目录 1.106题目 2.参考思路:递归切割数组 3.105题目 4.同样思路的代码 1.106题目 2.参考思路:递归切割数组 代码参考:公众号:代码随想录 后序数组+中序数组 以 后序数组(左右中 ...
- java二叉树合并_Java(树的前中后序遍历构造二叉树题型整合)前序和中序、中序和后序、前序和后序遍历序列构造二叉树算法整合归纳...
前言 二叉树各种花里胡哨的算法题真的把我搞晕了,今天特地整理出一类有关二叉树的算法题,希望能帮助阅读到此文章的人,今后不再受此类题型的困扰. 一.题目类型 已知二叉树的两种遍历序列,请根据该序列构建二 ...
- 【中序、后序遍历序列】【前序、中序遍历序列】构造二叉树
前置知识 第1点:每一个节点都可以看作一棵树的根节点. 第2点:掌握前序.中序.后序遍历顺序.前序遍历:根左右,中序遍历:左根右,后序遍历:左右根. 第3点:掌握双指针或者说滑动窗口,窗口所承载的是左 ...
- Suzy找到实习了吗Day 18 | 二叉树进行中:513 找树左下角的值,112 路径总和 ,106.从中序与后序遍历序列构造二叉树
513 找树左下角的值 solution # Definition for a binary tree node. # class TreeNode: # def __init__(self, val ...
- 【必拿下系列】106. 从中序与后序遍历序列构造二叉树105从前序与中序遍历序列构造二叉树
两题各自的链接放这里了: 链接: 106 链接: 105 106.从中序与后序遍历序列构造二叉树 如果你是不知道理论的,那就得仔细分析了, 举个例子: 输入:inorder = [9,3,15,20, ...
- 二叉树的先序、中序、后序、层序遍历方式详解,由遍历序列构造二叉树过程详解以及C++代码详细实现
二叉树的遍历 树与二叉树的定义.性质,二叉树的顺序存储结构.链式存储结构 二叉树的遍历是指按某条搜索路径访问树中每个结点,使得每个结点均被访问一次,而且仅被访问一次.由于二叉树是一种非线性结构,每个结 ...
- 二叉树的构造及其前序,中序,后序遍历
2019独角兽企业重金招聘Python工程师标准>>> 今天复习了下二叉树的基础知识. 有二叉树如下: 通过列表生成二叉树 # node树节点 class TreeNode(obje ...
最新文章
- 《塞洛特傳說》道具系统
- html概述和基本结构
- 河南省计算机三级准考证打印入口,2016年下半年河南计算机三级准考证打印入口及网址,计算机等级考试时间查询...
- .NET设计模式(1): 简单工厂模式
- 坑爹的libxml2 for mingw 编译
- 关于直播,所有的技术细节都在这里了(三)
- Spark的简介和在大数据领域的地位
- 跨部门的bug的沟通
- C语言小游戏 |100行代码实现扫雷
- 如何查看本机路由表并进行分析?
- FPGA 之 SOPC 系列(五)Nios II 软件使用与程序开发 I
- serviceWorker 服务器与浏览器之间的代理
- usb接口问题折腾记
- 物流人必备宝藏软件安利——Microcity
- Araxis Merge对比软件工具
- proguard学习
- 企业需要考虑的远程办公相关问题
- 多种方法进行数组从小到大排序
- 怎么用VB对接三方验证码短信接口
- “MacTalk 跨越边界” iBooks.