二叉树的遍历

本节主要介绍如何根据二叉树的遍历序列还原二叉树

1.根据前序遍历序列ABCDEF和中序遍历序列CBAEDF如何判断还原二叉树

(1)根节点:

   首先根据前序序列的第一个字母A确定根节点;

(2)确定左右子树的序列元素:

   根据中序序列确定左子树的序列是C、B,右子树的序列是E、D、F

(3)确定左子树:

根据前序序列ABC顺序判断B是A的左子树的根节点,但是不能判断C是B的左子节点还是右子节点;

根据中序序列CBA顺序确定C是B的左子节点

(4)确定右子树:

根据前序序列DEF顺序确定D是A的右子树的根节点,E是D的子节点,但不知道是左子节点还是右子节点,也不清楚F是D的子节点还是孙子节点;

根据中序序列EDF顺序确定E是D的左子节点,F是D的右子节点

综上即确定了二叉树,然后我们可以确定后序遍历序列是CBEFDA

2.根据中序遍历序列ABCDEFG和后序遍历序列BDCAFGE还原二叉树

(1)确定根节点:

根据后序序列的最后一个元素是E确定E是根节点

(2)确定左右子树的序列元素

根据中序序列以E为分割点确定左子树序列是ABCD,右子树序列是FG

(3)确定左子树

根据后序序列BDCA确定最后一个元素A是左子树的根节点,C是A的子节点,但不能确定是左节点还是右节点,BD是C的子孙,但不能确定都是儿子或有一个是孙子;

根据中序序列ABCD确定BCD是A的右子树,即C是A的右子节点;且B是C的左子节点,D是C的右子节点

(4)确定右子树

根据后序序列FGE确定G是E的右子树的根节点,F是G的子节点,但不知道是左子节点还是右子节点;

根据中序序列EFG确定F是左子节点

综上即确定了二叉树,得到前序序列是EACBDGF

3.总结

(1)综合上面的两种情况:可以把还原二叉树的过程看做四个步骤:

确定根节点:根据前(后)序序列的第一位(最后一位)确定根节点;

确定左右子树元素:根据中序序列确定左右子树的元素;

确定左子树:先根据前(后)序序列确定左子树的根节点及其子节点,然后根据中序序列确定左子树的剩余元素的位置;

确定右子树:先根据前(后)序序列确定右子树的根节点及其子节点,然后根据中序序列确定右子树的剩余元素的位置

(2)二叉树遍历的性质:

已知前序遍历序列和中序遍历序列可以唯一确定一棵二叉树;

已知后序遍历序列和中序遍历序列可以唯一确定一棵二叉树;

已知前序序列和后序序列是不能确定一棵二叉树的,因为只能确定根节点,而无法确定其余元素的位置

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 3,069评论 1 31
  • -先序遍历: 访问根结点,先序遍历其左子树,先序遍历其右子树;运用到递归void PreOrderTraversa...
    Spicy_Crayfish阅读 758评论 0 0
  • 二叉树的遍历想必大家都不陌生,主要有三种遍历方式:前序遍历(pre-order traversal),中序遍历(i...
    akak18183阅读 457评论 0 1
  • 树(tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。...
    曾大稳丶阅读 290评论 0 0
  • 一、基本概念 每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒。 性质: 1、非空二叉树的第n层上至多有2^...
    misheral阅读 215评论 4 0