题目描述
给定两个整数数组 inorder
和 postorder
,其中 inorder
是二叉树的中序遍历, postorder
是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。
示例 :
输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3] 输出:[3,9,20,null,null,15,7]
思路
回忆一下我们是怎么手动构造一棵二叉树的。就是以后序数组的最后一个元素为切割点,先切中序数组,根据中序数组,反过来再切后序数组。一层一层切下去,每次后序数组最后一个元素就是节点元素。
代码实现也是如此,那我们怎么模拟这个过程呢?
-
如果数组大小为零的话,说明是空节点了,直接返回。
-
如果不为空,那么取后序数组最后一个元素作为节点元素。
-
找到后序数组最后一个元素在中序数组的位置,作为切割点
-
切割中序数组,切成中序左数组和中序右数组
-
切割后序数组,切成后序左数组和后序右数组
-
递归处理左区间和右区间
要我们说里面最难的当属第四步和第五步了,我们要一开始就统一标准,到底是怎么去切割数组,我这里统一按照左闭右开的标准进行切割。
解法
C++版本
Java版本