先创建二叉树节点,编写节点的遍历方法
public class BinaryTreeNode //创建节点
{
private int id;
private String name;
private BinaryTreeNode left; //左节点索引 默认为空
private BinaryTreeNode right; //右节点索引 默认为空
public BinaryTreeNode(int id,String name)
{
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BinaryTreeNode getLeft() {
return left;
}
public void setLeft(BinaryTreeNode left) {
this.left = left;
}
public BinaryTreeNode getRight() {
return right;
}
public void setRight(BinaryTreeNode right) {
this.right = right;
}
@Override
public String toString() {
return "BinaryTreeNode{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
public void froList() //节点的前序遍历:根 左 右
{
System.out.println(this);
if(this.left!=null) //递归向左子树继续遍历
this.left.froList();
if(this.right!=null) //递归向右子树继续遍历
this.right.froList();
}
public void midList() //节点的中序遍历:左根右
{
if(this.left!=null)
this.left.midList();
System.out.println(this); //证明左子节点都没了,打印当前节点
if(this.right!=null)
this.right.midList();
}
public void endList() //节点的后续遍历:左右根
{
if(this.left!=null)
this.left.endList();
if(this.right!=null)
this.right.endList();
System.out.println(this);
}
}
再创建二叉树,编写二叉树的遍历(就是调用节点的方法)
public class BinaryTree {
private BinaryTreeNode root; //是二叉树的根节点,既是二叉树的属性,也是节点对象
public void set(BinaryTreeNode root)
{
this.root=root;
}
public void froOrder() //二叉树的前序遍历
{
if(this.root!=null)
this.root.froList(); //传进去的this就是root,谁调用就是传递的谁
else
System.out.println("二叉树为空");
}
public void midOrder(BinaryTreeNode root) //二叉树的中序遍历,和上述两种表达
{
if(root!=null)
root.midList();
else
System.out.println("二叉树为空");
}
public void endOrder() //二叉树的后序遍历
{
if(this.root!=null)
this.root.endList();
else
System.out.println("二叉树为空");
}
}
最后编写测试函数
public class BinaryTreeTest {
public static void main(String[] args) {
/手动创建节点,构建二叉树
BinaryTreeNode root=new BinaryTreeNode(1,"宋江");
BinaryTreeNode node2=new BinaryTreeNode(2,"吴用");
BinaryTreeNode node3=new BinaryTreeNode(3,"卢俊义");
BinaryTreeNode node4=new BinaryTreeNode(4,"林冲");
root.setLeft(node2);
root.setRight(node3);
node3.setRight(node4);
BinaryTree bianrytree=new BinaryTree();
bianrytree.set(root);
///进行测试
System.out.println("前序遍历");
bianrytree.froOrder();
System.out.println("中序遍历");
bianrytree.midOrder(root);
System.out.println("后序遍历");
bianrytree.endOrder();
}
}