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

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

/**

  • 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月前
排序二叉树的创建及先序、中序、后序输出二叉树
排序二叉树的创建及先序、中序、后序输出二叉树
27 1
|
4月前
|
Java C++ 索引
leetcode-106:从中序与后序遍历序列构造二叉树
leetcode-106:从中序与后序遍历序列构造二叉树
27 0
|
7月前
【LeetCode】105. 从前序与中序遍历序列构造二叉树
题目描述: 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例:
29 0
|
4月前
|
C++ 索引 Python
leetcode-105:从前序与中序遍历序列构造二叉树
leetcode-105:从前序与中序遍历序列构造二叉树
33 0
|
5月前
|
C++ 索引
从中序与后序遍历序列构造二叉树(C++实现)
从中序与后序遍历序列构造二叉树(C++实现)
36 1
|
5月前
|
C++ 索引
从前序与中序遍历序列构造二叉树(C++实现)
从前序与中序遍历序列构造二叉树(C++实现)
43 1
|
11月前
|
C++
力扣 - 106、从中序与后序遍历序列构造二叉树
力扣 - 106、从中序与后序遍历序列构造二叉树
76 0
leetcode 106 从中序和后续遍历序列构造二叉树
leetcode 106 从中序和后续遍历序列构造二叉树
68 0
leetcode 106 从中序和后续遍历序列构造二叉树