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

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

  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

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

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北京小辉

你的鼓舞将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值