二叉树的前序、中序、后序遍历(递归)
二叉树的遍历有前序、中序、后序、层序遍历等等。
前序遍历为针对一个二叉树的所有子树而言,访问的顺序为根节点->左子节点->右子节点。中序遍历的访问顺序为左子节点->根节点->右子节点。后序遍历的访问顺序为左子节点->右子节点->根节点。
如下二叉树:
前序遍历为: 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()+" "); }