JAVA二叉树

来源:互联网 发布:建行软件下载 编辑:程序博客网 时间:2024/06/01 10:47

JAVA二叉树

二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。

想要实现二叉树,首先要实现一个二叉树节点。

private class BinaryNode {        private int mValue;        private BinaryNode LefeNode;//左子树        private BinaryNode RightNode;//右子树        public BinaryNode(int value) {            //构造函数,默认左右子树均为空            mValue = value;            LefeNode = null;            RightNode = null;        }    }

接着实现一个二叉树的实体类

public class BinaryTree {    private BinaryNode root;//根节点    //创建一个二叉树     public void generateTree(int size) {        LinkedList<BinaryNode> nodes = new LinkedList<>();        for (int i = 1; i <= size; i++) {            nodes.add(new BinaryNode(i));        }        for (int parentIndex = 0; parentIndex < size / 2; parentIndex++) {            if (size > parentIndex * 2 + 1)                nodes.get(parentIndex).LefeNode = nodes.get(parentIndex * 2 + 1);            if (size > parentIndex * 2 + 2)                nodes.get(parentIndex).RightNode = nodes.get(parentIndex * 2 + 2);        }        root = nodes.get(0);    }    /**     * 递归前序遍历     * @param node     */    public void preOrder(BinaryNode node) {        if (node == null) return;        System.out.print(node.mValue + " ");        preOrder(node.LefeNode);        preOrder(node.RightNode);    }    /**     * 递归中序遍历     * @param node     */    public void midOrder(BinaryNode node) {        if (node == null) return;        midOrder(node.LefeNode);        System.out.print(node.mValue + " ");        midOrder(node.RightNode);    }    /**     * 递归后序遍历     * @param node     */    public void postOrder(BinaryNode node) {        if (node == null) return;        postOrder(node.LefeNode);        postOrder(node.RightNode);        System.out.print(node.mValue + " ");    }    /**     * 非递归前序遍历     * @param node     */    public void iteratorPreOrder(BinaryNode node){        Stack<BinaryNode> stack = new Stack<>();        while (node!=null || !stack.isEmpty()){            while (node!=null){                System.out.print(node.mValue + " ");                stack.add(node);                node = node.LefeNode;            }            if(!stack.isEmpty()){                node = stack.pop();                node = node.RightNode;            }        }    }    /**     * 非递归中序遍历     * @param node     */    public void iteratorMidOrder(BinaryNode node){        Stack<BinaryNode> stack = new Stack<>();        while (node!=null || !stack.isEmpty()){            while (node!=null){                stack.add(node);                node = node.LefeNode;            }            if(!stack.isEmpty()){                node = stack.pop();                System.out.print(node.mValue + " ");                node = node.RightNode;            }        }    }    /**     * 非递归后序遍历     * @param node     */    public void iteratorPostOrder(BinaryNode node){        Stack<BinaryNode> stack = new Stack<>();        BinaryNode pre_node = node;        while (node!=null || !stack.isEmpty()){            while (node!=null){                stack.add(node);                node = node.LefeNode;            }            if(!stack.isEmpty()){                BinaryNode temp = stack.peek().RightNode;                if(temp == null || temp == pre_node){                    temp = stack.pop();                    System.out.print(temp.mValue + " ");                    pre_node = temp;                    node = null;                }else{                    node = temp;                }            }        }    }}
原创粉丝点击