由遍历序列构造二叉树
上面为一个二叉树,可知它的遍历序列分别为:
- 先序遍历:ABDECFG
- 中序遍历:DBEAFCG
- 后序遍历:DEBFGCA
我们需要知道的是,由二叉树的先序序列 和 中序序列可以唯一地确定一棵二叉树;由二叉树的后序序列 和 中序序列也可以唯一地确定一棵二叉树;但是如果只知道先序序列和后序序列,则无法唯一确定一棵二叉树。
已知二叉树的先序序列和中序序列,求后序序列。
因为由二叉树的先序序列和中序序列可以唯一地确定一棵二叉树,所以进而可以唯一地确定它的后序遍历。在先序遍历序列中,第一个结点一定是二叉树的根结点,而在中序遍历中,根结点必然将中序序列分割成两个子序列,前一个子序列就是左子树的中序序列,后一个子序列就是右子树的中序序列。根据这两个子序列的长度,可以在先序序列中找到对应的左子树先序序列和右子树先序序列。而左子树先序序列的第一个结点是左子树的根结点,右子树先序序列的第一个结点是右子树的根结点。如此递归地进行下去,便能唯一地确定这棵二叉树。
C++代码:
1 | /************************************************************************* |
已知二叉树的后序序列和中序序列,求先序序列。
同理,由二叉树的后序序列和中序序列也可以唯一地确定一棵二叉树,所以进而可以唯一地确定先序遍历序列。因为后序序列的最后一个结点就如同先序序列的第一个结点,可以将中序序列分割成两个子序列,然后采用类似的方法递归地进行划分。
C++代码:
1 | /************************************************************************* |