leetcode-106-从中序和后序遍历构造二叉树

题目描述:

方法一:O(n) O(n)

class Solution:
    def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
        assert len(inorder)==len(postorder)
        if len(inorder)==0:
            return None
        if len(inorder)==1:
            return TreeNode(inorder[0])
        pos = inorder.index(postorder[-1])
        root = TreeNode(postorder[-1])
        root.left = self.buildTree(inorder[:pos],postorder[:pos])
        root.right = self.buildTree(inorder[pos+1:],postorder[pos:-1])
        return root

方法二;

class Solution:
    def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
        d={j:i for i,j in enumerate(inorder)}
        def f(i,j):
            if i<j:
                t=TreeNode(postorder.pop())
                t.right=f(d[t.val]+1,j)
                t.left=f(i,d[t.val])
                return t
        return f(0,len(inorder))

原文地址:https://www.cnblogs.com/oldby/p/11184943.html

时间: 2024-10-17 17:08:13

leetcode-106-从中序和后序遍历构造二叉树的相关文章

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

从中序与后序遍历序列构造二叉树 根据一棵树的中序遍历与后序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3 / 9 20 / 15 7 解题思路: 已知中序遍历和后序遍历IN和Post,求还原二叉树. 后序遍历的最后一个数post[len-1]就是root节点. 搜索IN,如果IN[I]=post[len-1],那么 IN[I+1]-I

【leetcode 106. 从中序与后序遍历序列构造二叉树】解题报告

前往 中序,后序遍历构造二叉树, 中序,前序遍历构造二叉树 TreeNode* build(vector<int>& inorder, int l1, int r1, vector<int>&postorder, int l2, int r2) { if (l1>r1) return nullptr; int x = postorder[r2], i = 0; // 确定当前根节点 for (i = l1; i <= r1 && inor

【2】【leetcode-105,106】 从前序与中序遍历序列构造二叉树,从中序与后序遍历序列构造二叉树

105. 从前序与中序遍历序列构造二叉树 (没思路,典型记住思路好做) 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / 9 20 / 15 7 链接:https://www.nowcoder.com/questionTerminal/0ee054a8767c4a6c96ddab65e08688f4来源:牛客

LeetCode | 0106. Construct Binary Tree from Inorder and Postorder Traversal从中序与后序遍历序列构造二叉树【Python】

LeetCode 0106. Construct Binary Tree from Inorder and Postorder Traversal从中序与后序遍历序列构造二叉树[Medium][Python][二叉树][递归] Problem LeetCode Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may assume that duplicates do not

LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序遍历建立二叉树 C++

Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that duplicates do not exist in the tree. For example, given inorder = [9,3,15,20,7] postorder = [9,15,7,20,3] Return the following binary tree: 3 / 9 20

第106题:从中序与后序遍历序列构造二叉树

一. 问题描述 根据一棵树的中序遍历与后序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3 / \ 9  20 /  \ 15   7 二. 解题思路 本题思路:采用中序和后序遍历的特性进行求解,跟第105题几乎完全相同,只是把前序第一个必定是根节点,改成后序最后一个必定是根节点这点区别,没啥说的,具体可看第105题. 三. 执行结果

[LeetCode] Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序遍历建立二叉树

Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may assume that duplicates do not exist in the tree. 这道题要求从中序和后序遍历的结果来重建原二叉树,我们知道中序的遍历顺序是左-根-右,后序的顺序是左-右-根,对于这种树的重建一般都是采用递归来做,可参见我之前的一篇博客Convert Sorted Array to Bin

leetcode题解:Construct Binary Tree from Inorder and Postorder Traversal(根据中序和后序遍历构造二叉树)

题目: Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that duplicates do not exist in the tree. 说明: 1)实现与根据先序和中序遍历构造二叉树相似,题目参考请进 算法思想 中序序列:C.B.E.D.F.A.H.G.J.I 后序序列:C.E.F.D.B.H.J.I.G.A 递归思路: 根据后序遍历的特点,知道后序

中序和后序遍历构造二叉树

题目链接: 涉及知识:二叉树的遍历 分析: 上一篇中介绍了如何通过二叉树的前序和中序遍历构造二叉树. 我们知道前序的遍历顺序是:根,左,右:中序的遍历顺序是左,根,右:后序的遍历顺序是左,右,根: 如果我们将后序遍历倒过来看便是根,右,左:会发现和前序遍历是非常相似的.前序遍历依次是根节点,左子树根节点,右子树根节点:后序遍历倒过来依次是根节点,右子树根节点,左子树根节点:因此解法和前序+中序生成后序的思路一样,从后序遍历中倒过来查找根节点,且先生成该节点的右子树,在生成该节点的左子树即可. 代

二叉树的前序、中序、后序遍历的递归和非递归算法实现

1 /** 2 * 二叉树的前序.中序.后序遍历的递归和非递归算法实现 3 **/ 4 5 //二叉链表存储 6 struct BTNode 7 { 8 struct BTNode *LChild; // 指向左孩子指针 9 ELEMENTTYPE data; // 结点数据 10 struct BTNode *RChild; // 指向右孩子指针 11 }; 12 13 /** 14 * 前序遍历 15 **/ 16 // 递归实现 17 void PreorderTraversal(BTNo