二叉树遍历(思想)

根据一棵树的先序/中序遍历,或者后序/中序遍历序列,都可以唯一地确定一棵树,算法如下:

  • 首先根据前序遍历或后序遍历的第一个或最后一个为根结点
  • 根据根节点可以在中序遍历中分出左子树部分和右子树部分
  • 根据前序/后序遍历的其他节点及中序遍历的左右两部分重复上述两步骤即可

遍历二叉树是以一定规则将二叉树中的结点排列成一个线性序列,得到二叉树中结点的先序序列、中序序列或后续序列。这实质上是对一个非线性结构进行线性化操作,使每个结点(除第一个和最后一个外)在这些线性序列中有且仅有一个直接前驱和直接后继。
当以二叉链表作为存储结构时,只能找到结点的左右孩子信息,而不能直接得到结点在任一序列中的前驱和后继信息,这种信息只有在遍历的动态过程中才能得到。
如何保存这种在遍历过程中得到的信息呢?一个最简单的方法是在每个节点上增加两个指针域,分别指示结点在遍历时得到的前驱和后继信息。显然,这样做使得结构的存储密度大大降低。另一方面,存在有n个结点的二叉链表中必定存在n+1个空链域。由此设想能否利用这些空链域来存放结点的前驱和后继的信息。把这种指向前驱和后继的指针成为线索,加上线索的二叉链表成为线索链表,相应的二叉树就称为线索二叉树(Threaded Binary Tree)

你可能感兴趣的:(算法)