- 二叉树还原为树、森林
- 若某结点是其双亲的左孩子,则把该结点的右孩子、右孩子的右孩子等都与该结点的双亲结点用连线连起来。
- 删除原二叉树中所有双亲结点与右孩子结点之间的连线。
- 整理由前面两步得到的树,即以根结点为轴心,逆时针转动45°,使之结构层次分明。实际上,二叉树的还原就是将二叉树中的左分支保持不变,将二叉树中的右分支还原成兄弟关系。
5. 二叉树的遍历(序指的根的顺序)
深度优先遍历
- 先序遍历(preorder traversal)
- 访问根结点;
- 先序遍历左子树;
- 先序遍历右子树。
显然,在一棵二叉树的先序序列中,第一个元素即为根结点对应的结点值。
- 中序遍历(inorder traversal)
- 中序遍历左子树;
- 访问根结点;
- 中序遍历右子树。
在一棵二叉树的中序序列中,根结点值将其序列分为前、后两个部分,前部分为左子树的中序序列,后部分为右子树的中序序列。
- 后序遍历(postorder traversal)
- 后序遍历左子树;
- 后序遍历右子树;
- 访问根结点。
在一棵二叉树的后序序列中,最后一个元素即为根结点对应的结点值。
- 层次遍历(level traversal)
层次遍历不同于前面3种遍历方法,它是非递归的,用于一层一层地访问二叉树中的所有结点。
若二叉树非空(假设其高度为h),则:
- 访问根结点(第1层);
- 从左到右访问第2层的所有结点;
- 从左到右访问第3层的所有结点、……、第h层的所有结点。
在一棵二叉树的层次遍历序列中,第一个元素即为根结点对应的结点值。