二叉树前 中 后
- 前序:根 左 右
- 中序:左 根 右
- 后序:左 右 根
顾名思义:二叉树的遍历都是基于根节点的位置进行判断的。遍历的顺序也是基于根节点的顺序进行的。
步骤
- 1 为了方便进行演示,创建一棵二叉树。
- 2 前序遍历:
- 2.1 输出当前节点(初始的当前节点是root)。
- 2.2 如果左子节点不为空,则递归继续前序遍历。
- 2.3 如果右子节点不为空,则递归继续前序遍历。
- 3 中序遍历:
- 3.1 如果左子节点不为空,则递归继续中序遍历。
- 3.2 输出当前节点。
- 3.3 如果右子节点不为空,则递归继续中序遍历。
- 4 后序遍历:
- 4.1 如果左子节点不为空,则递归继续后序遍历。
- 4.2 如果右子节点不为空,则递归继续后序遍历。
- 4.3 输出当前节点。
创建节点
//先创建HeroNode 节点
class HeroNode {
private int no;
private String name;
private HeroNode left;//默认是null
private HeroNode right;
public HeroNode(int no, String name) {
this.no = no;
this.name = name;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public HeroNode getLeft() {
return left;
}
public void setLeft(HeroNode left) {
this.left = left;
}
public HeroNode getRight() {
return right;
}
public void setRight(HeroNode right) {
this.right = right;
}
@Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", name='" + name + '\'' +
'}';
}
创建二叉树
BinaryTree binaryTree = new BinaryTree();
// 创建需要的节点
HeroNode root = new HeroNode(1,"宋江");
HeroNode node2 = new HeroNode(2,"吴用");
HeroNode node3 = new HeroNode(3,"卢俊义");
HeroNode node4 = new HeroNode(4,"林冲");
HeroNode node5 = new HeroNode(5,"关胜");
HeroNode node6 = new HeroNode(6,"武松");
HeroNode node7 = new HeroNode(7,"李逵");
// 先手动创建该二叉树//
// 后面使用递归进行
root.setLeft(node2);
node2.setLeft(node6);
node2.setRight(node7);
root.setRight(node3);
node3.setLeft(node5);
node3.setRight(node4);
binaryTree.setRoot(root);
用图展示一下:
前序 中序 后序(这里使用了递归的思想,如果写的不够详细,可以单出一个关于递归的)
//前序遍历的方法
public void preOrder() {
//(父节点) 先输出当前的节点
System.out.println(this);
// 递归左子树前序遍历
if (this.left != null) {
this.left.preOrder();
}
// 递归向右子树前序遍历
if (this.right != null) {
this.right.preOrder();
}//
}
// 中序
public void infixOrder(){
// 递归左子树中序遍历
if (this.left !=null)
{
this.left.infixOrder();
}
System.out.println(this);
// 递归右子树
if(this.right !=null){
this.right.infixOrder();
}
}
public void postOrder(){
if (this.left !=null){
this.left.postOrder();
}
if (this.right !=null){
this.right.postOrder();
}
System.out.println(this);
}
测试输出
前序遍历
HeroNode{no=1, name='宋江'}
HeroNode{no=2, name='吴用'}
HeroNode{no=6, name='武松'}
HeroNode{no=7, name='李逵'}
HeroNode{no=3, name='卢俊义'}
HeroNode{no=5, name='关胜'}
HeroNode{no=4, name='林冲'}
中序遍历
HeroNode{no=6, name='武松'}
HeroNode{no=2, name='吴用'}
HeroNode{no=7, name='李逵'}
HeroNode{no=1, name='宋江'}
HeroNode{no=5, name='关胜'}
HeroNode{no=3, name='卢俊义'}
HeroNode{no=4, name='林冲'}
后序遍历
HeroNode{no=6, name='武松'}
HeroNode{no=7, name='李逵'}
HeroNode{no=2, name='吴用'}
HeroNode{no=5, name='关胜'}
HeroNode{no=4, name='林冲'}
HeroNode{no=3, name='卢俊义'}
HeroNode{no=1, name='宋江'}