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

简介: 从中序与后序遍历序列构造二叉树

/**

  • Definition for a binary tree node.
  • public class TreeNode {
  • int val;
  • TreeNode left;
  • TreeNode right;
  • TreeNode() {}
  • TreeNode(int val) { this.val = val; }
  • TreeNode(int val, TreeNode left, TreeNode right) {
  • this.val = val;
  • this.left = left;
  • this.right = right;
  • }
  • }

*/
class Solution {

Map<Integer, Integer> hm = new HashMap<>();

public TreeNode buildTree(int[] inorder, int[] postorder) {
    for (int i = 0; i < inorder.length; ++i) {
        hm.put(inorder[i], i);
    }
    return dfs(inorder, 0, inorder.length - 1, postorder, 0, postorder.length - 1);
}

TreeNode dfs(int[] in, int il, int ir, int[] post, int pl, int pr) {
    if (il > ir) {
        return null;
    }
    int k = hm.get(post[pr]);
    TreeNode node = new TreeNode(post[pr]);
    node.left = dfs(in, il, k - 1, post, pl, pl + k - 1 - il);
    node.right = dfs(in, k + 1, ir, post, pl + k - il, pr - 1);
    return node;
}

}

相关文章
|
6月前
|
Java C++ 索引
leetcode-106:从中序与后序遍历序列构造二叉树
leetcode-106:从中序与后序遍历序列构造二叉树
50 0
【LeetCode】105. 从前序与中序遍历序列构造二叉树
题目描述: 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例:
61 0
|
1月前
|
存储 索引 Python
从中序与后序遍历序列构造二叉树
【10月更文挑战第13天】这段内容介绍了一种基于中序和后序遍历序列构建二叉树的方法。通过识别后序遍历中的根节点,并利用中序遍历划分左右子树,进而递归构建整棵树。文中提供了具体示例及Python代码实现,并分析了该方法的时间与空间复杂度。
21_从中序与后序遍历序列构造二叉树
21_从中序与后序遍历序列构造二叉树
|
11月前
|
C++ 索引
从中序与后序遍历序列构造二叉树(C++实现)
从中序与后序遍历序列构造二叉树(C++实现)
73 1
|
11月前
|
C++ 索引
从前序与中序遍历序列构造二叉树(C++实现)
从前序与中序遍历序列构造二叉树(C++实现)
92 1
|
6月前
|
C++ 索引 Python
leetcode-105:从前序与中序遍历序列构造二叉树
leetcode-105:从前序与中序遍历序列构造二叉树
46 0
|
C++
力扣 - 106、从中序与后序遍历序列构造二叉树
力扣 - 106、从中序与后序遍历序列构造二叉树
103 0
|
机器学习/深度学习
每日三题-对称二叉树、从前序与中序遍历序列构造二叉树、不同的二叉搜索树
每日三题 对称二叉树 从前序与中序遍历序列构造二叉树 不同的二叉搜索树
93 4
每日三题-对称二叉树、从前序与中序遍历序列构造二叉树、不同的二叉搜索树
leetcode 106 从中序和后续遍历序列构造二叉树
leetcode 106 从中序和后续遍历序列构造二叉树
82 0
leetcode 106 从中序和后续遍历序列构造二叉树