Java链表来存储二叉树和(前中后序)遍历二叉树--Java版

来源:互联网 发布:命运交响曲 知乎 编辑:程序博客网 时间:2024/06/10 23:57

全二叉树展示
这里写图片描述

  1. 前根序遍历:先遍历根结点,然后遍历左子树,最后遍历右子树。遍历的顺序为:ABDGHCEIF
    这里写图片描述

2.中根序遍历:先遍历左子树,然后遍历根结点,最后遍历右子树。遍历的顺序为:GDHBAEICF

这里写图片描述

3.后根序遍历:先遍历左子树,然后遍历右子树,最后遍历根节点。遍历的顺序为:GHDBIEFCA
这里写图片描述

package com.datastructure;/** * Created by silentwolf on 2017/4/18. *//** * 需求: * 1、使用链表来存储二叉树 * 2、实现二叉树的创建、前序遍历、中序遍历和后序遍历 *  * 步骤: * 1、建立Node节点的类,设置leftChild,rightChild,data属性 * 2、建立数组,使用递归创建二叉树,方法为buildTree() * 3、main函数中调用buildTree(),第一次确定根节点数据 * 4、main函数中调用buildTree(),第二次确定根节点的左节点还是右节点 * 5、循环第4部,再buildTree()使用递归,判断节点数据的左节点还是右节点 * 6、4,5步骤之后,链表来存储二叉树完成 * 7、递归遍历:前序、中序、后续节点 **/public class BinTreeInt {    private Node root;    /**     * 创建内部节点类     **/    private class Node{        //      左节点        private Node leftChild;        //      右节点        private Node rightChild;        //      节点对应的值        private int data;        public Node(int data){            this.leftChild = null;            this.rightChild = null;            this.data = data;        }    }// class Node    public BinTreeInt(){        root = null;    }    /*     *递归:创建二叉树     * */    public void buildTree(Node node ,int data){        if (root == null){// 如果根节点为空,创建根节点            root = new Node(data);        }else{            if(data <node.data){                //插入到左子树                System.out.println("node.data");                if(node.leftChild == null){                    //左节点为空,直接创建值为data的左节点                    node.leftChild = new Node(data);                }else{                    //左节点不为空,调用buildTree函数插到左子树中                    buildTree(node.leftChild,data);                }            }else{                //插入到右子树                if(node.rightChild == null){                    node.rightChild = new Node(data);                }else{                    buildTree(node.rightChild,data);                }            }        }    }    /*     *递归:前序遍历二叉树     * */    public void preOrder(Node node){        if(node != null){            System.out.print(node.data);            preOrder(node.leftChild);            preOrder(node.rightChild);        }    }    /*     *递归:中序遍历二叉树     * */    public void inOrder(Node node){        if(node != null){            inOrder(node.leftChild);            System.out.print(node.data);            inOrder(node.rightChild);        }    }    /*     *递归:后序遍历二叉树     * */    public void postOrder(Node node){        if(node != null){            postOrder(node.leftChild);            postOrder(node.rightChild);            System.out.print(node.data);        }    }    public static void main(String ars[]){        int[] a={2,4,12,45,21,6,111};        BinTreeInt binTree = new BinTreeInt();        for(int i = 0; i<a.length; i++){            binTree.buildTree(binTree.root, a[i]);        }        System.out.print("前序遍历");        binTree.preOrder(binTree.root);        System.out.println("");        System.out.print("中序遍历");        binTree.inOrder(binTree.root);        System.out.println("");        System.out.print("后序遍历");        binTree.postOrder(binTree.root);    }}

执行结果:

前序遍历241264521111
中序遍历246122145111
后序遍历621111451242

       如果您喜欢我写的博文,读后觉得收获很大,不妨小额赞助我一下,让我有动力继续写出高质量的博文,感谢您的赞赏!!!

原创粉丝点击