类似上一题,这次我们利用后序和中序遍历的结果数组来还原二叉树,这是力扣第 106 题「 从后序和中序遍历序列构造二叉树 」:
函数签名如下:
类似的,看下后序和中序遍历的特点:
这样的遍历顺序差异,导致了 postorder
和 inorder
数组中的元素分布有如下特点:
这道题和上一题的关键区别是,后序遍历和前序遍历相反,根节点对应的值为 postorder
的最后一个元素。
整体的算法框架和上一题非常类似,我们依然写一个辅助函数 build
:
现在 postoder
和 inorder
对应的状态如下:
我们可以按照上图将问号处的索引正确填入:
综上,可以写出完整的解法代码:
可视化: 东哥带你刷二叉树(构造篇) | labuladong 的算法笔记
有了前一题的铺垫,这道题很快就解决了,无非就是 rootVal
变成了最后一个元素,再改改递归函数的参数而已,只要明白二叉树的特性,也不难写出来。