106. Construct Binary Tree from Inorder and Postorder Traversal

Given inorder and postorder traversal of a tree, construct the binary tree.

题目:给定一个树的中序排列和后续排列数组,重新绘制出该树

思路:由于后序的顺序的最后一个肯定是根,所以原二叉树的根节点可以知道,题目中给了一个很关键的条件就是树中没有相同元素,有了这个条件我们就可以在中序遍历中也定位出根节点的位置,并以根节点的位置将中序遍历拆分为左右两个部分,分别对其递归调用原函数。

复制代码
 1     
 2     private int getIndexInInorder(int[] inorder, int val) {
 3         for (int i = 0; i < inorder.length; i++)  if (val == inorder[i]) return i;
 4         return -1;
 5     }
 6     
 7     private TreeNode buildPostAndIn(int[] postorder, int[] inorder, int postIndex,
 8                                     int startInIndex, int endInIndex) {
 9         if (endInIndex < startInIndex) return null;
10         TreeNode node = new TreeNode(postorder[postIndex]);//后续,最后一个节点一定是根节点
11         int index = getIndexInInorder(inorder,node.val); //获取该节点在中序数组中的位置,进一步结合startInIndex和endInIndex可以获得左右字树的范围
12         int lenL = index - startInIndex;
13         int lenR = endInIndex - index;
14         if (lenL > 0) node.left = buildPostAndIn(postorder, inorder, postIndex - lenR - 1, startInIndex,
15                 index - 1);
16         if (lenR > 0) node.right = buildPostAndIn(postorder, inorder, postIndex - 1,
17                 index + 1, endInIndex);
18         return node;
19     }
20     
21     public TreeNode buildTree(int[] inorder, int[] postorder) {
22         if (postorder == null || postorder.length == 0) return null;
23         if (inorder == null || inorder.length == 0) return null;
24         if (postorder.length != inorder.length) return null;
25         return buildPostAndIn(postorder, inorder, postorder.length-1, 0, inorder.length - 1);        
26     }
复制代码

 

posted @   daniel456  阅读(179)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示