在二叉树的一些应用中,常常要求在树中查找具有某些特征的节点,或者对树中进行全部的节点逐一进行某种处理。这就提出了一个遍历二叉树的问题,即如何按照某条路径依次寻访树中的每个节点,使得每个节点均被访问一次,而且是仅被访问一次。根据二叉树的特点可知,二叉树有三个基本元素组成:根节点,左子树,右子树。因此若能依次遍历这三部分,便是遍历了整个二叉树。
二叉树的遍历方法和操作:
1.先序遍历二叉树
若二叉树为空,则空操作;否则:
先访问根节点
先序遍历左子树
先序遍历右子树
2.中序遍历二叉树
若二叉树为空,则空操作;否则:
中序遍历左子树
访问根节点
中序遍历右子树
3.后序遍历二叉树
若二叉树为空,则空操作;否则:
后序遍历左子树
后序遍历右子树
访问根节点
递归实现是比较简单的:
先序遍历二叉树:
public void perOrder(Node node){
if(node!=null){
System.out.println(node.data.value); //输出节点的值
preOrder(node.getLeftNode()); //访问左子树
preOrder(node.detRightNode()); //访问右子树
}
}
中序遍历二叉树:
public void inOrder(Node node){
if(node!=null){
inOrder(node.getLeftNode()); //访问左子树
System.out.println(node.data.value); //输出节点的值
inOrder(node.detRightNode()); //访问右子树
}
}
后序遍历二叉树:
public void postOrder(Node node){
if(node!=null){
postOrder(node.getLeftNode()); //访问左子树
postOrder(node.detRightNode()); //访问右子树
System.out.println(node.data.value); //输出节点的值
}
}