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

简介: 力扣106. 从中序与后序遍历序列构造二叉树Java

题目

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。

image.png

代码

class Solution {

   public TreeNode buildTree(int[] inorder, int[] postorder) {

       int inlen = inorder.length;

       int postlen = postorder.length;

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

       for(int i = 0; i < inlen; i++){

           map.put(inorder[i], i);

       }

       return buildTree(postorder, 0, postlen - 1, map, 0, inlen - 1);

   }

   private TreeNode buildTree(int[] postorder, int postLeft, int postRight, Map<Integer, Integer> map, int inLeft, int inRight){

       if(postLeft > postRight || inLeft > inRight){

           return null;

       }

       int rootVal = postorder[postRight];

       TreeNode root = new TreeNode(rootVal);

       int postIndex = map.get(rootVal);

       root.left = buildTree(postorder, postLeft, postIndex - inLeft + postLeft - 1, map, inLeft, postIndex - 1);

       root.right = buildTree(postorder, postIndex - inLeft + postLeft, postRight - 1, map, postIndex + 1,inRight );

       return root;

   }

}

相关文章
|
3月前
|
Java
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(二)
38 1
|
3月前
|
算法 Java C语言
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
【用Java学习数据结构系列】震惊,二叉树原来是要这么学习的(一)
33 1
|
2月前
|
算法 Java
JAVA 二叉树面试题
JAVA 二叉树面试题
26 0
|
3月前
【LeetCode 37】106.从中序与后序遍历构造二叉树
【LeetCode 37】106.从中序与后序遍历构造二叉树
29 0
|
3月前
|
算法 Java
LeetCode(一)Java
LeetCode(一)Java
|
5月前
|
算法 Java
LeetCode第94题二叉树的中序遍历
文章介绍了LeetCode第94题"二叉树的中序遍历"的解法,使用递归实现了中序遍历的过程,遵循了"左根右"的遍历顺序,并提供了清晰的Java代码实现。
LeetCode第94题二叉树的中序遍历
|
14天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
69 17
|
25天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
10天前
|
缓存 安全 算法
Java 多线程 面试题
Java 多线程 相关基础面试题