【LeetCode】106. 从中序与后序遍历序列构造二叉树

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

知识点:二叉树,递归

题目描述

根据一棵树的中序遍历与后序遍历构造二叉树。

注意:
你可以假设树中没有重复的元素。

示例
中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7

解法一:递归法

此题和105题基本一样,所以我们仍然使用这样的思路继续下去。

/** * 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 { public TreeNode buildTree(int[] inorder, int[] postorder) { if(postorder == null) return null; Map<Integer, Integer> map = new HashMap<>(); for(int i = 0; i < inorder.length; i++){ map.put(inorder[i], i); } return buildTree(inorder, postorder, 0, inorder.length-1, 0, postorder.length-1, map); } private TreeNode buildTree(int[] inorder, int[] postorder, int inleft, int inright, int postleft, int postright, Map<Integer,Integer> map){ if(postleft > postright) return null; TreeNode root = new TreeNode(postorder[postright]); int rootIndex = map.get(root.val); int leftTreeSize = rootIndex-inleft; root.left = buildTree(inorder, postorder, inleft, rootIndex-1, postleft, postleft+leftTreeSize-1,map); root.right = buildTree(inorder, postorder, rootIndex+1, inright, postleft+leftTreeSize, postright-1,map); return root; } }

__EOF__

本文作者Curryxin
本文链接https://www.cnblogs.com/Curryxin/p/15067411.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Curryxin  阅读(85)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
Live2D
欢迎阅读『【LeetCode】106. 从中序与后序遍历序列构造二叉树』
点击右上角即可分享
微信分享提示