美文网首页算法与数据结构随笔-生活工作点滴
算法与数据结构系列之[二叉树-下]

算法与数据结构系列之[二叉树-下]

作者: 秦老厮 | 来源:发表于2019-07-09 20:09 被阅读1次

上篇贴出了二叉树的C语言代码实现,这篇贴出Java代码实现。

public class BinaryTree{

    private class Node{
        public int e;
        public Node left;
        public Node right;
        public Node(int e){
            this.e = e;
            this.left = null;
            this.right = null;
        }
        public Node(){
            this(0);
        }
    }

    private Node root; //二叉树的根节点

    public BinaryTree(){
        root = new Node();
    }

    /**
     * 初始化二叉树,创建根节点
     * 这里为了方便起见,假设输入的节点只能是大于0的数,小于等于0都视作空树
     *
     * @return
     */
    public Node initBinaryTree(){
        int  val;
        System.out.println("请输入根节点:");
        Scanner scanner = new Scanner(System.in);
        val =  scanner.nextInt();
        if(val <= 0){
            System.out.println("该树为空树");
            System.exit(0);
        }

        root.e = val;
        root.left = null;
        root.right = null;


        return root;
    }
    /**
     * 创建二叉树
     * 这里为了方便起见,假设输入的节点只能是大于0的数,小于等于0都视作无效
     * 如果一个节点的左子节点输入的值为小于0的数,则该节点没有左子节点,返回
     * 如果一个节点的右子节点输入的值为小于0的数,则该节点没有右子节点,返回
     * @param n
     */
    public void createTree(Node n){
        int val;
        System.out.println(MessageFormat.format("请输入{0}的左子节点",n.e));
        Scanner scanner = new Scanner(System.in);
        val =  scanner.nextInt();
        if(val <= 0)
            return;
        if(val >0){
            Node node = new Node(val);
            n.left = node;
            createTree(n.left);
        }

        System.out.println(MessageFormat.format("请输入{0}的右子节点",n.e));
        Scanner sn = new Scanner(System.in);
        val =sn.nextInt();
        if(val >0){
            Node node = new Node(val);
            n.right = node;
            createTree(n.right);
        }
    }

    public void createTree(){
        createTree(initBinaryTree());
    }
    /**
     * 二叉树的前序遍历
     * @param node
     */
    private void preOrder(Node node){
        if(node == null)
            return;
        System.out.print(node.e);
        preOrder(node.left);
        preOrder(node.right);
    }


    public void preOrder(){
        preOrder(root);
    }

    /**
     * 二叉树的中序遍历
     * @param node
     */
    private void inOrder(Node node){
        if(node == null)
            return;
        inOrder(node.left);
        System.out.print(node.e);
        inOrder(node.right);
    }

    public void inOrder(){
        inOrder(root);
    }

    /**
     * 二叉树的后序遍历
     * @param node
     */
    private void postOrder(Node node){
        if(node == null)
            return;
        postOrder(node.left);
        postOrder(node.right);
        System.out.print(node.e);
    }

    public void postOrder(){
        postOrder(root);
    }
    
    public static void main(String[] args) {
        BinaryTree binaryTree = new BinaryTree();
        binaryTree.createTree();
        binaryTree.preOrder();
        System.out.println();
        binaryTree.inOrder();
        System.out.println();
        binaryTree.postOrder();
    }

相关文章

网友评论

    本文标题:算法与数据结构系列之[二叉树-下]

    本文链接:https://www.haomeiwen.com/subject/kawfkctx.html