博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode106. 从中序与后序遍历序列构造二叉树
阅读量:5167 次
发布时间:2019-06-13

本文共 1043 字,大约阅读时间需要 3 分钟。

106. 从中序与后序遍历序列构造二叉树

描述

根据一棵树的中序遍历与后序遍历构造二叉树。

注意:

你可以假设树中没有重复的元素。

示例

例如,给出

中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]

返回如下的二叉树:

3   / \  9  20    /  \   15   7

思路

一颗二叉树,对于后序遍历来说,其最后一个元素一定是这棵树的根节点。在中序遍历中找到这个元素所在的位置,那么它的左半部分就是其左子树,右半部分就是其右子树。

重复上述过程, 通过后续遍历找到根节点, 然后在中序遍历数据中根据根节点拆分成两个部分, 同时将对应的后序遍历的数据也拆分成两个部分, 重复递归, 就可以得到整个二叉树了。

# Definition for a binary tree node.# class TreeNode:#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution:    def buildTree(self, inorder, postorder):        """        :type inorder: List[int]        :type postorder: List[int]        :rtype: TreeNode        """        if not inorder or len(inorder) == 0:            return None        root = TreeNode(postorder[-1])        idx = inorder.index(postorder[-1])        root.left = self.buildTree(inorder[:idx], postorder[:idx])        root.right = self.buildTree(inorder[idx + 1:], postorder[idx:-1])        return root

GitHub 地址:

701977-20190501094902261-873549745.png

转载于:https://www.cnblogs.com/banshaohuan/p/10837377.html

你可能感兴趣的文章
语言基础(9):static, extern 和 inline
查看>>
ES5_03_Object扩展
查看>>
bzoj 2600: [Ioi2011]ricehub
查看>>
创建数据库,表
查看>>
工厂模式
查看>>
计算机网络基础知识
查看>>
C#里如何遍历枚举所有的项
查看>>
如何在键盘出现时滚动表格,以适应输入框的显示
查看>>
超级强大的鼠标手势工具
查看>>
常用Dockerfile举例
查看>>
jquery的ajax用法
查看>>
设计模式-策略模式(Strategy)
查看>>
django orm 数据查询详解
查看>>
JarvisOJ Basic 熟悉的声音
查看>>
C# list导出Excel(二)
查看>>
CAS 单点登录模块学习
查看>>
跟着辛星用PHP的反射机制来实现插件
查看>>
Android应用开发-网络编程①
查看>>
input中的name,value以及label中的for
查看>>
静态库制作-混编(工程是oc为基础)
查看>>