二叉树前中后序遍历

来源:互联网 发布:现在什么软件翻墙好 编辑:程序博客网 时间:2024/06/10 08:43

Java实现二叉树的前序、中序、后续遍历。

一、定义二叉树的数据结构。

/** * Created by xdcoder on 17/4/17. */public class BinaryTree {    public int value;    public BinaryTree left;//左子树    public BinaryTree right;//右子树    public BinaryTree(int value){        this.value = value;        this.left = null;        this.right = null;    }}

所谓三种不同的顺序:区别在于 根节点 遍历的时机不同,
**前序:根左右(根节点在最前面);
中序:左根右(根节点在中间)
后序:左右根(根节点在最后)**

二、前序遍历

这里写图片描述
遍历顺序:根->左->右

    //前序遍历    public static void PreOrderTraverse(BinaryTree binaryTree){        if(binaryTree == null)            return;        //根        System.out.print(binaryTree.value  + "\t");        //左        PreOrderTraverse(binaryTree.left);        PreOrderTraverse(binaryTree.right);    }

三、中序遍历

这里写图片描述
遍历顺序:左->根->右

    //中序遍历    public static void InOrderTraverse(BinaryTree binaryTree){        if(binaryTree == null){            return;        }        InOrderTraverse(binaryTree.left);        System.out.print(binaryTree.value + "\t");        InOrderTraverse(binaryTree.right);    }

四、后序遍历

这里写图片描述
遍历顺序:左->右->根

    //后续遍历    public  static void PostOrderTraverse(BinaryTree binaryTree){        if(binaryTree == null)            return;        PostOrderTraverse(binaryTree.left);        PostOrderTraverse(binaryTree.right);        System.out.print(binaryTree.value + "\t");    }

五、例子

这里写图片描述
程序结果:

前序遍历
1 2 4 8 9 5 10 11 3 6 12 13 7 14 15

中序遍历
8 4 9 2 10 5 11 1 12 6 13 3 14 7 15

后序遍历
8 9 4 10 11 5 2 12 13 6 14 15 7 3 1

/** * Created by xdcoder on 17/4/17. */public class BinaryTree {    public int value;    public BinaryTree left;//左子树    public BinaryTree right;//右子树    public BinaryTree(int value){        this.value = value;        this.left = null;        this.right = null;    }}
public class Main {    public static void main(String[] args) {//        System.out.println("Hello World!");        BinaryTree root = new BinaryTree(1);        BinaryTree node2 = new BinaryTree(2);        BinaryTree node3 = new BinaryTree(3);        BinaryTree node4 = new BinaryTree(4);        BinaryTree node5 = new BinaryTree(5);        BinaryTree node6 = new BinaryTree(6);        BinaryTree node7 = new BinaryTree(7);        BinaryTree node8 = new BinaryTree(8);        BinaryTree node9 = new BinaryTree(9);        BinaryTree node10 = new BinaryTree(10);        BinaryTree node11= new BinaryTree(11);        BinaryTree node12 = new BinaryTree(12);        BinaryTree node13 = new BinaryTree(13);        BinaryTree node14 = new BinaryTree(14);        BinaryTree node15 = new BinaryTree(15);        root.left = node2;        root.right = node3;        node2.left = node4;        node2.right = node5;        node4.left = node8;        node4.right = node9;        node5.left = node10;        node5.right = node11;        node3.left = node6;        node3.right = node7;        node6.left = node12;        node6.right = node13;        node7.left = node14;        node7.right = node15;        System.out.println("前序遍历");        PreOrderTraverse(root);        System.out.println("\n中序遍历");        InOrderTraverse(root);        System.out.println("\n后序遍历");        PostOrderTraverse(root);    }    //前序遍历    public static void PreOrderTraverse(BinaryTree binaryTree){        if(binaryTree == null)            return;        //根        System.out.print(binaryTree.value  + "\t");        //左        PreOrderTraverse(binaryTree.left);        PreOrderTraverse(binaryTree.right);    }    //中序遍历    public static void InOrderTraverse(BinaryTree binaryTree){        if(binaryTree == null){            return;        }        InOrderTraverse(binaryTree.left);        System.out.print(binaryTree.value + "\t");        InOrderTraverse(binaryTree.right);    }    //后续遍历    public  static void PostOrderTraverse(BinaryTree binaryTree){        if(binaryTree == null)            return;        PostOrderTraverse(binaryTree.left);        PostOrderTraverse(binaryTree.right);        System.out.print(binaryTree.value + "\t");    }}
0 0
原创粉丝点击