先序(根左右):ABCDEF
中序(左根右):CBDAEF
后序(左右根):CDBFEA
先序
先输出节点的值;再看是否有左节点,有则将左节点值输出(直到没有左节点为止);再看是否有右节点,有则将右节点值输出(直到没有右节点为止)
用递归实现先序
public class MyTree {
private Node first;//头(根)节点
public void sort(){
first.xianxu();
}
}
class Node {
private int element;//元素
private Node left;//左节点
private Node right;//右节点
public void xianxu(){
System.out.println(this.element);//遍历到一个节点就即刻将值输出
if(left!=null)
left.qianxu();
if (right!=null)
right.qianxu();
}
}
中序
遍历到一个节点后,将其暂存,遍历完左子树后,再输出该节点的值,然后遍历右子树。
用递归实现中序
public class MyTree {
private Node first;//头(根)节点
public void sort(){
first.zhongxu();
}
}
class Node {
private int element;//元素
private Node left;//左节点
private Node right;//右节点
public void zhongxu(){
if(left!=null)
left.zhongxu();
System.out.println(this.element);//遍历完左节点才输出该值
if (right!=null)
right.zhongxu();
}
}
后序
遍历到一个节点后,将其暂存,遍历完左右子树后,再输出该节点的值
用递归实现后序
public class MyTree {
private Node first;//头(根)节点
public void sort(){
first.houxu();
}
}
class Node {
private int element;//元素
private Node left;//左节点
private Node right;//右节点
public void houxu(){
if(left!=null)
left.houxu();
if (right!=null)
right.houxu();
System.out.println(this.element);//最后输出该节点的值
}
}