[Java算法分析与设计]二叉树的遍历

来源:互联网 发布:淘宝智能版装修素材 编辑:程序博客网 时间:2024/06/08 02:15

设计Node节点类:

package com.chen.arithmetic_test.BiTree_test;/** * Created by ChenMP on 2017/7/13. */public class BiTreeNode {    private Object data;    private BiTreeNode leftChild;    private BiTreeNode rightChild;    public BiTreeNode() {    }    public BiTreeNode(Object data) {        this.data = data;    }    public BiTreeNode(Object data, BiTreeNode leftChild, BiTreeNode rightChild) {        this.data = data;        this.leftChild = leftChild;        this.rightChild = rightChild;    }    public Object getData() {        return data;    }    public void setData(Object data) {        this.data = data;    }    public BiTreeNode getLeftChild() {        return leftChild;    }    public void setLeftChild(BiTreeNode leftChild) {        this.leftChild = leftChild;    }    public BiTreeNode getRightChild() {        return rightChild;    }    public void setRightChild(BiTreeNode rightChild) {        this.rightChild = rightChild;    }}

设计二叉树的遍历实现:

package com.chen.arithmetic_test.BiTree_test;import java.util.LinkedList;import java.util.Queue;/** * Created by ChenMP on 2017/7/13. */public class Traverse {    //前序遍历    public static void preOrder(BiTreeNode root) {        if (root != null) {            System.out.print("_" + root.getData()); //打印根节点            if (root.getLeftChild() != null)                preOrder(root.getLeftChild()); //左子节点递归            if (root.getRightChild() != null)                preOrder(root.getRightChild()); //右子节点递归        }    }    //中序遍历    public static void inOrder(BiTreeNode root) {        if (root != null) {            if (root.getLeftChild() != null)                inOrder(root.getLeftChild()); //左子节点递归            System.out.print("_" + root.getData()); //打印根节点            if (root.getRightChild() != null)                inOrder(root.getRightChild()); //右子节点递归        }    }    //后序遍历    public static void postOrder(BiTreeNode root) {        if (root != null) {            if (root.getLeftChild() != null)                postOrder(root.getLeftChild()); //左子节点递归            if (root.getRightChild() != null)                inOrder(root.getRightChild()); //右子节点递归            System.out.print("_" + root.getData()); //打印根节点        }    }    //层序遍历    public static void levOrder(BiTreeNode root) {        Queue<BiTreeNode> queue = new LinkedList<BiTreeNode>();        if (root == null)            return ;        BiTreeNode curr;        queue.add(root);        while(!queue.isEmpty()) {            curr = queue.remove(); //获取顺序表第一位节点            System.out.print("_" + curr.getData());            if (curr.getLeftChild() != null)                queue.add(curr.getLeftChild());            if (curr.getRightChild() != null)                queue.add(curr.getRightChild());        }    }}

设计测试类

package com.chen.arithmetic_test.BiTree_test;/** * Created by ChenMP on 2017/7/13. */public class Test {    /**二叉树形     *                      A     *               B                 C     *       D                   E            F     *           G     *        H     I     */    public static BiTreeNode makeTree() {        BiTreeNode b,c,d,e,f,g,h,i;        i = new BiTreeNode(new Character('I'), null, null);        h = new BiTreeNode(new Character('H'), null, null);        g = new BiTreeNode(new Character('G'), h, i);        d = new BiTreeNode(new Character('D'), null, g);        b = new BiTreeNode(new Character('B'), d, null);        e = new BiTreeNode(new Character('E'), null, null);        f = new BiTreeNode(new Character('F'), null, null);        c = new BiTreeNode(new Character('C'), e, f);        return new BiTreeNode(new Character('A'), b, c);    }    public static void main(String[] args) {        BiTreeNode root = Test.makeTree();        System.out.println("前序遍历:");        Traverse.preOrder(root);        System.out.println("\n中序遍历:");        Traverse.inOrder(root);        System.out.println("\n后序遍历:");        Traverse.postOrder(root);        System.out.println("\n层序遍历");        Traverse.levOrder(root);    }}
阅读全文
0 0
原创粉丝点击