前中===>后
例如:在一棵二叉树总,前序遍历结果为:ABDGCEFH,中序遍历结果为:DGBAECHF,求后序遍历结果。
我们知道:
前序遍历方式为:根节点->左子树->右子树
中序遍历方式为:左子树->根节点->右子树
后序遍历方式为:左子树->右子树->根节点
从这里可以看出,前序遍历的第一个值就是根节点,然后再中序遍历中找到这个值,那么这个值的左边部分即为当前二叉树的左子树部分前序遍历结果,这个值的右边部分即为当前二叉树的右子树部分前序遍历结果。因此,通过这个分析,可以恢复这棵二叉树
就该题为例,从前序遍历可以发现A为根节点,从中序遍历可以发现 DGB为左子树 ECHF为右子树
下面开始画左子树 这一步的关键是,不要把左子树当一个枝看待,要当成一棵新树看待
那么这棵新树 的前序遍历也就是 整棵树前序遍历的包含所有左子树的部分BDG
中序遍历也就是整棵树中序遍历的包含左子树的部分 DGB
那么可以把上面的结果当成一个新树采用第一步同样方法处理,就可以一步一步得到结果,当然右侧部分也跟左侧一模一样方式处理
后 中===>前
这种方式其实和前中退出后序是一样的从后序入手找根节点,从中序找子树。拆解完后的新树,还是按照第一步从后序找跟,中序找子树。