题目链接:leetcode
思路:
虽然是二叉树的题目,但是更多的还是分治的思想 对于给定的后序遍历postorder和中序遍历inorder,首先我们不难发现,这棵树的根结点其实就是postorder[-1]。同时知道postorder[-1]在inorder中一定也存在,不妨设postorder[-1]==inorder[k]。
由于inorder是中序遍历,所以k左边的就是根节点左子树的中序遍历、k右边的就是根节点右子树的中序遍历。
通过中序遍历我们知道左子树的长度,不妨设为l,我们可以知道postorder从0到l就是根节点左子树的前序遍历,剩下的最后一部分就是根节点右子树的前序遍历。
也就是说,我们可以计算出左子树、右子树的后序遍历和中序遍历,从而可以用分治的思想,将规模较大的问题分解成为两个较小的问题,然后递归的进行处理,还原左子树和右子树,最后连通根节点一起组成一棵完整的树。
1 | # Definition for a binary tree node. |