• 二叉树还原为树、森林
  1. 若某结点是其双亲的左孩子,则把该结点的右孩子、右孩子的右孩子等都与该结点的双亲结点用连线连起来。
  2. 删除原二叉树中所有双亲结点与右孩子结点之间的连线。
  3. 整理由前面两步得到的树,即以根结点为轴心,逆时针转动45°,使之结构层次分明。实际上,二叉树的还原就是将二叉树中的左分支保持不变,将二叉树中的右分支还原成兄弟关系。

数据结构(知识点碎片二十)_子树数据结构(知识点碎片二十)_二叉树_02

5. 二叉树的遍历(序指的根的顺序)

深度优先遍历

  • 先序遍历(preorder traversal)
  1. 访问根结点;
  2. 先序遍历左子树;    
  3. 先序遍历右子树。

显然,在一棵二叉树的先序序列中,第一个元素即为根结点对应的结点值。

  • 中序遍历(inorder traversal)
  1. 中序遍历左子树;
  2. 访问根结点;
  3. 中序遍历右子树。

在一棵二叉树的中序序列中,根结点值将其序列分为前、后两个部分,前部分为左子树的中序序列,后部分为右子树的中序序列。

  • 后序遍历(postorder traversal)
  1. 后序遍历左子树;
  2. 后序遍历右子树;
  3. 访问根结点。
    在一棵二叉树的后序序列中,最后一个元素即为根结点对应的结点值。
  • 层次遍历(level traversal)

层次遍历不同于前面3种遍历方法,它是非递归的,用于一层一层地访问二叉树中的所有结点。
若二叉树非空(假设其高度为h),则:

  1. 访问根结点(第1层);
  2. 从左到右访问第2层的所有结点;
  3. 从左到右访问第3层的所有结点、……、第h层的所有结点。

在一棵二叉树的层次遍历序列中,第一个元素即为根结点对应的结点值。

数据结构(知识点碎片二十)_子树_03