二叉树的前序、中序、后序遍历(递归)
二叉树的遍历有前序、中序、后序、层序遍历等等。
前序遍历为针对一个二叉树的所有子树而言,访问的顺序为根节点->左子节点->右子节点。中序遍历的访问顺序为左子节点->根节点->右子节点。后序遍历的访问顺序为左子节点->右子节点->根节点。
如下二叉树:
前序遍历为: 124758369
中序遍历为: 742851693
后序遍历为: 748529631
二叉树的遍历可以分解为多个小的子树进行遍历,与递归思想很接近,下面使用递归的方式实现三种遍历:
二叉树节点定义类:
public class TreeNode {
private String data;
private TreeNode left;
private 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 setData(String data) {
this.data = data;
}
public TreeNode getLeft() {
return left;
}
public void setLeft(TreeNode left) {
this.left = left;
}
public TreeNode getRight() {
return right;
}
public void setRight(TreeNode right) {
this.right = right;
}
}
前序遍历:
//前序遍历
public static void pre(TreeNode treeNode) {
System.out.print(treeNode.getData()+" ");
if (treeNode.getLeft() != null) {
pre(treeNode.getLeft());
}
if (treeNode.getRight() != null) {
pre(treeNode.getRight());
}
}
中序遍历
//中序遍历
public static void in(TreeNode treeNode) {
if (treeNode.getLeft() != null) {
in(treeNode.getLeft());
}
System.out.print(treeNode.getData()+" ");
if (treeNode.getRight() != null) {
in(treeNode.getRight());
}
}
后序遍历:
//后序遍历
public static void post(TreeNode treeNode) {
if (treeNode.getLeft() != null) {
post(treeNode.getLeft());
}
if (treeNode.getRight() != null) {
post(treeNode.getRight());
}
System.out.print(treeNode.getData()+" ");
}
