package com.yang.traverse;
/**
* 二叉树的递归遍历(先序、中序、后序)
*/
public class BinaryTree {
// 内部类,定义树的结点
public static class TreeNode{
// 数据域
String data;
// 左孩子树
TreeNode left;
// 右孩子树
TreeNode right;
public TreeNode(String data, TreeNode left, TreeNode right) {
this.data = data;
this.left = left;
this.right = right;
}
public String getData() {
return data;
}
public void setLeft(TreeNode left) {
this.left = left;
}
public void setRight(TreeNode right) {
this.right = right;
}
}
// 主函数,程序入口
public static void main(String[] args) {
new BinaryTree().test();
}
/**
* 先序遍历(递归)
* @param treeNode:传入的根结点
*/
public static void proOrder(TreeNode treeNode){
if (treeNode==null){
return;
} else{
System.out.print(treeNode.data+" ");
proOrder(treeNode.left);
proOrder(treeNode.right);
}
}
/**
* 中序遍历(递归)
* @param treeNode:传入的根节点
*/
public static void midOrder(TreeNode treeNode){
if (treeNode==null){
return;
}else {
midOrder(treeNode.left);
System.out.print(treeNode.data+" ");
midOrder(treeNode.right);
}
}
/**
* 后序遍历
* @param treeNode:传入的根节点
*/
public static void posOrder(TreeNode treeNode){
if (treeNode==null){
return;
}else {
posOrder(treeNode.left);
posOrder(treeNode.right);
System.out.print(treeNode.data+" ");
}
}
/**
* 测试,方法的调用,树的构建
*/
public static void test(){
//构建树,在此处a是根结点
TreeNode d=new TreeNode("D",null,null);
TreeNode e=new TreeNode("E",null,null);
TreeNode b=new TreeNode("B",d,e);
TreeNode f=new TreeNode("F",null,null);
TreeNode c=new TreeNode("C",null,f);
TreeNode a=new TreeNode("A",b,c);
System.out.println("先序遍历:");
proOrder(a);
System.out.println();
System.out.println("中序遍历: ");
midOrder(a);
System.out.println();
System.out.println("后序遍历:");
posOrder(a);
}
}
【结果】:
先序遍历:
A B D E C F
中序遍历:
D B E A C F
后序遍历:
D E B F C A
Process finished with exit code 0