在二叉树中遍历的方式有三种:先序遍历,中序遍历和后序遍历
首先看先序遍历的遍历顺序:根节点->左子树->右子树
中序遍历:左子树->根节点->右子树
后序遍历:左子树->右子树->根节点
从遍历的顺序我们可以发现每一次位置移动的都是根节点,而左右子树的相对顺序是永远不变的,所以从位置移动的结点可以快速找到根节点、左子树的根节点和右子树的根节点。
下面来实际操作一下:
一棵二叉树的先序遍历序列为A、B、C、D、E、F,中序遍历遍历序列为C、B、A、E、D、F,则后序遍历序列为()
解题思路:
首先给出了先序遍历和中序遍历,那么根据遍历的顺序可以发现只有根节点后移,那么后移的为根节点。从题目中可以发现A、B、D三个节点后移,那么这三个节点分别为根节点。根据先序遍历可以确定A为根节点,那么B为左子树的根节点,D为右子树的根节点。
然后,由先序遍历到中序遍历被提前的是左子树,那么C为左子树,E为右子树。
那么在后序遍历中现对于中序遍历,根节点进一步后移。所以本题的答案为:C、B、E、F、D、A
检验一下:
一棵二叉树的后序遍历序列为D、A、B、E、C,中序遍历序列为D、E、B、A、C,则先序遍历序列为:
分析:后序遍历到中序遍历,提前的节点为根节点,由题目中可以看到E、B两个节点提前了,那么E、B两个节点为根节点,在中序遍历中左子树的根节点相较于根节点靠前。那么B结点为根节点吗?答案是否定的。因为通过后序遍历中我们知道,最后一个节点为根节点,那么可以确定的是C为根节点,C的位置没有发生改变,那么可以确定C之前的节点全为二叉树的做子树。在左子树中B、E分别为根节点。根据左子树的后序遍历可以发现E为左子树的根节点,根据中序遍历E的右子树,D为E的左子树,在中序遍历中B结点在A结点之前,那么A为B的右子树
所以先序遍历应为:C、E、D、B、A