遍历树是根据一种特定的顺序访问树的每一个节点。这个过程相对比较慢,所以一般不常用。
常用的遍历方法有三种,分别是:前序遍历,中序遍历,后序遍历。其中最常用,也最简单的是中序遍历。
遍历的最简单方法是用敌对调用,这里我们将三种排序方法都使用递归调用。
1.中序遍历
二叉树会使所有的节点按关键字值升序被访问到。如果需要创建有序的数据序列,使用中序遍历将会非常简单。
方法:
1.调用自身来遍历节点的左子树。
2.访问这个节点。
3.调用自身来遍历节点的右子树。
代码:
/** * 中序遍历 * @param localRoot 节点值 */ private void inOrder(Node localRoot) { if (localRoot != null) { inOrder(localRoot.leftChild); System.out.print(localRoot.iData + " "); inOrder(localRoot.rightChild); } }
执行结果:G D H B E I A C J F
投影法:
结果:G D H B E I A C J F
2.前序遍历
前序遍历多用于算术运算中表达式的表示方法。
方法:
1.访问这个节点。
2.调用自身遍历该节点的左子树。
3.调用自身遍历该节点的右子树。
代码:
/** * 前序遍历 * @param localRoot 节点值 */ private void preOrder(Node localRoot) { if (localRoot != null) { System.out.print(localRoot.iData + " "); preOrder(localRoot.leftChild); preOrder(localRoot.rightChild); } }
执行结果:A B D G E I C F G
3.后序遍历
方法:
1.调用自身遍历该节点的左子树。
2.调用自身遍历该节点的右子树。
3.访问这个节点。
代码:
/** * 后续遍历 * @param localRoot 节点值 */ private void postOrder(Node localRoot) { if (localRoot != null) { postOrder(localRoot.leftChild); postOrder(localRoot.rightChild); System.out.print(localRoot.iData + " "); } }
执行结果:G H D I E B J F C A
总结:
记忆遍历的三种方法,根据”访问这个节点”所在的位置确定。
如果在前面,则是前序遍历。
如果在中间,则是中序遍历。
如果在后面,则是后序遍历。