Binary Tree Traversal二叉树遍历方法总结
摘要
这里总结的二叉树遍历分为两大类:
- 深度优先(depth-first traversal)
- 广度优先(breadth-first traversal)
其中深度优先包括三种类型:
- PreOrder traversal:以“父节点-左子节点-右子节点”为顺序
- InOrder traversal:以“左子节点-父节点-右子节点”为顺序
- PostOrder traversal:以“左子节点-右子节点-父节点”为顺序
广度优先只包括一种类型:
- LevelOrder traversal:从上到下每层从左到右顺序
举个例子,不同方法遍历下图中的二叉树结果:
PreOrder traversal:8, 5, 9, 7, 1, 12, 2, 4, 11, 3
InOrder traversal:9, 5, 1, 7, 2, 12, 8, 4, 3, 11
PostOrder traversal:9, 1, 2, 12, 7, 5, 3, 11, 4, 8
LevelOrder traversal:8, 5, 4, 9, 7, 11, 1, 12, 3, 2
下图为不同方法遍历该树,访问的节点顺序:
代码实现
PreOrder traversal
在此类型中,我们将遍历的节点依次存入一个List中(也可以直接print)。
迭代方法
public class TreeNode {
//树节点类,此后不再重复声明此类
int val; //树节点值
TreeNode left; //左子节点
TreeNode right; //右子节点
TreeNode(int x) { val = x; }
}
public class solution{
public ArrayList<Integer> preOrder(TreeNode root){
List<Integer> pre = new ArrayList<>();