递归算法
基本思想
递归的基本思想就是自己调用自己,一个使用递归技术的方法将会直接或者间接的调用自己。
递归结构包括两个部分:
定义递归头,即确定什么时候结束调用自己
定义递归体,即确定什么时候调用自身方法
递归的用法-二叉树数据结构
使用递归的算法可以实现二叉树数据结构,以下是分别实现树的前序遍历、中序遍历、后序遍历。
前序遍历: 先访问根节点,再访问左节点,再访问右节点
中序遍历: 先访问左子节点,在访问跟节点,最后访问右子节点
后序遍历:先访问左节点,再访问右节点,最后访问根节点
public class BinaryTree {
public static void main(String[] args) {
Tree root = new Tree(1);
Tree node1 = new Tree(7);
Tree node2 = new Tree(3);
Tree node3 = new Tree(5);
Tree node4 = new Tree(13);
Tree node5 = new Tree(8);
Tree node6 = new Tree(9);
Tree node7 = new Tree(11);
Tree node8 = new Tree(23);
Tree node9 = new Tree(6);
root.leftTree = node1;
root.rightTree = node2;
node1.leftTree = node3;
node1.rightTree = node4;
node2.leftTree = node5;
node3.leftTree = node6;
node3.rightTree = node7;
node4.leftTree = node8;
node4.rightTree = node9;
preOrder(root);
System.out.println("*******");
inorder(root);
System.out.println("*******");
postorder(root);
}
//前序遍历方法
public static void preOrder(Tree root) {
if (root == null) return;
System.out.println(root.value);
preOrder(root.leftTree);
preOrder(root.rightTree);
}
//中序遍历方法
public static void inorder(Tree root) {
if (root == null) return;
inorder(root.leftTree);
System.out.println(root.value);
inorder(root.rightTree);
}
//后序遍历方法
public static void postorder(Tree root) {
if (root == null) return;
postorder(root.leftTree);
postorder(root.rightTree);
System.out.println(root.value);
}
}