栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java 有序二叉树插入代码与四种遍历

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java 有序二叉树插入代码与四种遍历

        有序二叉树,顾名思义他是有序的,该树的每一个结点的左节点都小于该节点,所有的右节点都大于该节点,如果数满足这种条件则称之为有序二叉树。比如下面这就是一颗有序二叉树。

        

 这是树结点的代码,一个结点有他的左子树与右子树以及该节点对应的值

public class Tree {
    public Tree left=null;
    public Tree right=null;
    public int value;

}

 这是我的有序树,其中,treeNode指的是这棵树的根结点,fisrtOut等4个方法分别对应四种遍历方式。

public class OrderlyTree {
    public Tree treeNode=null;
    public Tree t;
    public void add(Tree x){
        if(treeNode==null){
            treeNode=x;
        }else{
            t=treeNode;
            while (t!=null){
                if(x.value q=new QueueDemo();
        if(x==null){
            System.out.println("空");
        }else{
            q.add(x);
            while(!q.contains()){
                Tree tt=q.get();
                System.out.print(tt.value+"   ");
                if(tt.left!=null){
                    q.add(tt.left);
                }
                if(tt.right!=null){
                    q.add(tt.right);
                }
            }
        }
    }

}

 而最后一个层次遍历我们需要用到一个队列结构,他是我自己创建的一个泛型队列,代码如下:

public class QueueDemo{
    private E[] arr=(E[]) new Object[20];
    private int frist=0;
    private int last=0;
    private int flag=0;
    public void add(E x){
        if(frist==last&&flag!=0){
            E[]arrx=(E[]) new Object[arr.length*2];
            int j=0;
            for(int i=frist;i0){
            E x=arr[frist];
            flag--;
            frist=(frist+1)%arr.length;
            return x;
        }else{
            return null;
        }
    }
    public boolean contains(){
        if(flag==0){
            return true;
        }else{
            return false;
        }
    }
}

 主方法:

public static void main(String[] args) {
        OrderlyTree o=new OrderlyTree();
        int[] arr={7,5,6,9,4,2,3,5};
        for(int i:arr){
            Tree t=new Tree();
            t.value=i;
            o.add(t);
        }
        System.out.println("先序遍历");
        o.firstOut(o.treeNode);
        System.out.println();
        System.out.println("中序遍历");
        o.midOut(o.treeNode);
        System.out.println();
        System.out.println("后序遍历");
        o.lastOut(o.treeNode);
        System.out.println();
        System.out.println("层次遍历");
        o.layerlayerOut(o.treeNode);

    }

通过主方法我们可以大致画出插入后的图

我们最开始插入时,没有结点,于是第一个数7成为了根节点,往后每个节点进来时,都先和7比较,比7大找他的左边,比7大或等于找他的右边,这样我们就创建了一颗有序二叉树。

但这个份代码是不好的,因为这棵树不是一颗平衡二叉树,关于平衡二叉树的知识点我另外整理了一边博客,因为我们可能出现一种情况插入的树是几乎有序,就会出现一头深度非常大,另一头缺只有1,2个,所以我们需要另外写代码实现他的平衡,但我这先不涉及

四种遍历

 1、先序遍历,也叫先根遍历,先访问它的根节点,在访问他的左节点,最后访问他的右节点

 2、中序遍历,也叫中根遍历,先访问它的左节点,在访问他的根节点,最后访问他的右节点

 3、后序遍历,也叫后根遍历,先访问它的左节点,在访问他的右节点,最后访问他的根节点

 5、层次遍历,一层一层从左到右遍历

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/709069.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号