1、简介
二叉树遍历即将二叉树中所有的节点遍历一遍,根据节点遍历的顺序的不同,分为前序遍历,中序遍历。下面这个图为要遍历的二叉树(图来自参考文献2)。
2、 代码流程
每种遍历方式中,包含两种,递归方法和非递归方法。
遍历的主要流程:
2.1 前序遍历
前序遍历思路:
- 访问根节点
- 前序遍历左子树
- 前序遍历右子树
/**
* 前序遍历,递归方法.
* @param root 根节点
*/
public void preOrder(Node root){
if (root!=null){
printNode(root); //访问根节点
preOrder(root.getLeftNode()); //前序遍历左子树
preOrder(root.getRightNode()); //前序遍历右子树
}
}
/**
* 前序遍历,非递归方法.
* @param root 根节点
*/
public void preOrder_stack(Node root){
Stack<Node> stack = new Stack<>();
while(root!=null || !stack.isEmpty()){
if(root!=null){
printNode(root); //访问根节点
stack.push(root); //入栈
root = root.getLeftNode(); //访问左子树
}else{
root = stack.pop(); //回溯至父节点
root = root.getRightNode(); //访问右子树
}
}
System.out.println();
}
输出结果为:
前序遍历
6 3 1 2 5 4 9 7 8
2.2 中序遍历
中序遍历思路:
- 中序遍历左子树
- 访问根节点
- 中序遍历