力扣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;

   }

}

相关文章
|
24天前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
22 4
|
28天前
|
算法 Java 索引
【算法】重建二叉树并进行后序遍历的Java实现
【算法】重建二叉树并进行后序遍历的Java实现
20 5
|
26天前
|
算法 搜索推荐 Java
二叉树的基本概念、常见操作以及如何使用Java代码
二叉树的基本概念、常见操作以及如何使用Java代码
16 1
|
20天前
|
Java
二叉树简单遍历、查找、删除(java)
二叉树简单遍历、查找、删除(java)
11 0
|
20天前
|
存储 Java
顺序存储二叉树(java)
顺序存储二叉树(java)
10 0
|
20天前
|
Java
二叉树线索化(java)
二叉树线索化(java)
9 0
|
1月前
|
Java
二叉树搜索 - Java版
二叉树搜索 - Java版
8 0
|
1月前
|
Java
P9242 [蓝桥杯 2023 省 B] 接龙数列JAVA,边权为1的最短路问题,洛谷P9242 [蓝桥杯 2023 省 B] 接龙数列​编辑力扣1926.迷宫离入口最近的出口力扣433.
P9242 [蓝桥杯 2023 省 B] 接龙数列JAVA,边权为1的最短路问题,洛谷P9242 [蓝桥杯 2023 省 B] 接龙数列​编辑力扣1926.迷宫离入口最近的出口力扣433.
|
4天前
|
Java 调度
Java线程的六种状态
Java线程有六种状态: 初始(NEW)、运行(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、超时等待(TIMED_WAITING)、终止(TERMINATED)。
13 1