遍历意味着访问树的所有节点。有三种遍历二叉树的标准方法。这些如下:
- 预购遍历
- 邮购遍历
- 有序遍历
- 参观树的根。
- 遍历左子树。
- 遍历右侧子树。
- 以后置顺序遍历左侧子树。
- 以后置顺序遍历右边的子树。
- 参观树的根。
- 按顺序遍历左侧子树。
- 参观树的根。
- 按顺序遍历右侧子树。
解决方案:树的预排序, 后排序和有序遍历如下:
Preorder | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
Postorder | 3 | 5 | 4 | 2 | 7 | 10 | 9 | 11 | 8 | 6 | 1 |
Inorder | 3 | 2 | 5 | 4 | 1 | 7 | 6 | 9 | 10 | 8 | 11 |
- 我们知道二叉树的根是其预定顺序中的第一个节点。画出树的根。
- 要查找根节点的左子节点, 首先, 使用顺序遍历在二叉树的左子树中查找节点。 (在顺序遍历中留给根节点的所有节点都是左子树的节点)。之后, 通过选择左子树的预遍历中的第一个节点来获得根的左子节点。画左孩子。
- 以相同的方式, 使用顺序遍历在二叉树的右子树中查找节点。然后, 通过选择右子树的预遍历中的第一个节点来获得右子级。画一个合适的孩子。
- 对每个新节点重复步骤2和3, 直到未按预定顺序访问每个节点。最后, 我们获得一棵唯一的树。
Inorder | B | A | D | C | F | E | J | H | K | G | I |
Preorder | A | B | C | D | E | F | G | H | J | K | I |
(b)在给出树的有序和后序遍历时绘制唯一二叉树的算法:
- 我们知道二叉树的根是其后序中的最后一个节点。画出树的根。
- 要找到根节点的右子节点, 首先, 使用顺序遍历在二叉树的右子树中找到节点。 (在顺序遍历中, 根节点右边的所有节点都是右边子树的节点)。之后, 通过选择右子树的后序遍历中的最后一个节点来获得根的右子节点。画一个合适的孩子。
- 以相同的方式, 使用顺序遍历在二叉树的左子树中查找节点。然后, 通过选择左子树的后序遍历中的最后一个节点来获得左孩子。画左孩子。
- 对每个新节点重复步骤2和3, 直到在后继订购中未访问每个节点为止。访问最后一个节点后, 我们获得了唯一的树。
Inorder | 4 | 6 | 10 | 12 | 8 | 2 | 1 | 5 | 7 | 11 | 13 | 9 | 3 |
Postorder | 12 | 10 | 8 | 6 | 4 | 2 | 13 | 11 | 9 | 7 | 5 | 3 | 1 |
现在, 检查有序遍历, 我们知道根在中心, 因此, 在有序遍历中留在根节点上的所有节点都是左子树的节点, 而在根节点右边的所有节点都是正确的子树。
现在, 从后顺序遍历中从后面访问下一个节点, 并检查其在顺序遍历中的位置, 如果它在根的左侧, 则将其绘制为左子节点, 如果它在右侧, 则将其绘制为右子节点。
对每个新节点重复上述过程, 我们获得如图2所示的二叉树:
【离散数学遍历二叉树】(c)将通用树转换为二叉树的算法
- 从根节点开始, 树的根也是二叉树的根。
- 树中根节点的第一个子节点C1(从左开始)是二叉树中根节点的左子节点C1, C1的兄弟节点是C1的右子节点, 依此类推。
- 对每个新节点重复步骤2。
解决方案:树的根是二叉树的根。因此, A是二叉树的根。现在B成为二叉树中A的左孩子, C成为B的右孩子, D成为C的右孩子, E成为二叉树中D的右孩子, 类似地应用算法, 我们得到二叉树如图: