二叉树的遍历有前序遍历、中序遍历、后序遍历和层序遍历。
前序遍历指先遍历根结点,然后遍历左结点直到叶子节点,再遍历右结点;
中序遍历指先遍历遍历左结点直到叶子节点,然后遍历根结点,再遍历右结点;
后序遍历指先遍历遍历左结点直到叶子节点,再遍历右结点到叶子结点,再遍历根结点;
层序遍历指按树的层级遍历;
//定义一棵二叉树
public class BinaryTree {
public TreeNode root;
// 设置根结点
public void setRoot(TreeNode root) {
this.root = root;
}
// 获取根结点
public TreeNode getRoot() {
return root;
}
//树的遍历实际上调用结点的遍历
//前序遍历
public void frontShow() {
if(root!=null)
root.frontShow();
}
//中序遍历
public void middleShow() {
if(root!=null)
root.middleShow();
}
//后序遍历
public void backShow() {
if(root!=null)
root.backShow();
}
实际上二叉树的遍历采用了递归的思想,一直递归左、右结点直到叶子结点再遍历另一个方向。
//树的结点
public class TreeNode {
// 结点的权
int value;
// 左儿子
TreeNode lNode;
// 右儿子
TreeNode rNode;
public TreeNode(int value) {
this.value = value;
}
// 设置左儿子
public void setlNode(TreeNode lNode) {
this.lNode = lNode;
}
// 设置右儿子
public void setrNode(TreeNode rNode) {
this.rNode = rNode;
}
// 前序遍历
public void frontShow() {
// 先遍历当前结点的内容
System.out.print(value+" ");
// 左结点
if (lNode != null)
lNode.frontShow();
// 右结点
if (rNode != null)
rNode.frontShow();
}
//中序遍历
public void middleShow() {
//左结点
if(lNode!=null)
lNode.middleShow();
//当前结点
System.out.print(value+" ");
//右结点
if(rNode!=null)
rNode.middleShow();
}
public void backShow() {
//左结点
if(lNode!=null)
lNode.backShow();
//右结点
if(rNode!=null)
rNode.backShow();
//当前结点
System.out.print(value+" ");
}
}
//测试类
public class TestBinaryTree {
public static void main(String[] args) {
// 创建如上图的一棵树
BinaryTree b = new BinaryTree();
// 创建根结点
TreeNode root = new TreeNode(1);
// 把根结点赋给树
b.setRoot(root);
// 创建左结点
TreeNode rootL = new TreeNode(2);
// 把新创建的结点设置为根结点的子结点
root.setlNode(rootL);
// 创建右结点
TreeNode rootR = new TreeNode(3);
// 把新创建的结点设置为根结点的子结点
root.setrNode(rootR);
// 为第二层的左结点创建两个子结点
rootL.setlNode(new TreeNode(4));
rootL.setrNode(new TreeNode(5));
// 为第二层的左结点创建两个子结点
rootR.setlNode(new TreeNode(6));
rootR.setrNode(new TreeNode(7));
// 前序遍历树
//输出:1 2 4 5 3 6 7
b.frontShow();
System.out.println();
System.out.println("+++++++++++++++++++");
//中序遍历树
//输出:4 2 5 1 6 3 7
b.middleShow();
System.out.println();
System.out.println("+++++++++++++++++++");
//后序遍历树
//输出:4 5 2 6 7 3 1
b.backShow();
}
}