美文网首页
二叉树基础

二叉树基础

作者: jiamjg | 来源:发表于2018-11-01 00:17 被阅读0次

普通的二叉树可以通过下面代码创造出来:

//递归定义法
class Bitree{
    private int v;//乘客
    private Bitree l;
    private Bitree r;

    public Bitree(int x){
        v=x;
    }
    public void add(Bitree the){
        if(the.v<v){
            if(l==null){
                l=the;
            }else{
                l.add(the);
            }
        }else{
            if(r==null){
                r=the;
            }else{
                r.add(the);
            }
        }
    }
    public void before_trav(){
        System.out.println(v);
        if(l!=null){
            l.before_trav();
        }
        if(r!=null){
            r.before_trav();
        }
    }
    //中序遍历
    public void mid_trav(){
        if(l!=null){
            l.mid_trav();
        }
        System.out.println(v);
        if(r!=null){
            r.mid_trav();
        }
    }
    //后序遍历
    public void after_trav(){
        if(l!=null){
            l.after_trav();
        }
        if(r!=null){
            r.after_trav();
        }
        System.out.println(v);
    }
}

只不过二叉树有畸形的可能,这时候我们需要平衡二叉树
代码如下:

class Bitree{
    private int v;//乘客
    private Bitree l;
    private Bitree r;
    private int balance=0; //平衡因子
    public Bitree(int x){
        v=x;
    }
    //添加节点
    public void add(Bitree the){
        Bitree root=this;
        if(the.v<v){
            if(l==null){
                l=the;
            }else{
                l.add(the);
            }
        }else{
            if(r==null){
                r=the;
            }else{
                r.add(the);
            }
        }
        //平衡二叉树
        calu_balance();
        if(balance>1){
            if(l.getBalance()>0)
                root=adjustLL();
            else
                root=adjustLR();
        }
        if(balance>-1){
            if(l.getBalance()<0)
                root=adjustRR();
            else
                root=adjustRL();
        }
    }
    public int getBalance(){
        return balance;
    }
    //LL调整
    private Bitree adjustLL(){
        Bitree root=l;   //this指的是源根节点
        l=root.r;
        root.r=this;
        return root;
    }
    //RR调整
    private Bitree adjustRR(){
        Bitree root=r;
        r=root.l;
        root.l=this;
        return root;
    }
    //LR调整
    private Bitree adjustLR(){
        l=l.adjustRR();
        return adjustLL();
    }
    //RL调整
    private Bitree adjustRL(){
        r=r.adjustLL();
        return adjustRR();
    }
    //获取二叉树高度
    public int getHeight(){
        int h=1;
        int h1=(l==null?0:l.getHeight());
        int h2=(r==null?0:r.getHeight());
        return h+Math.max(h1,h2);
    }
    //获取二叉树宽度
    public int getWidth(){
        int w=(""+v).length();
        if(l!=null)
            w+=l.getWidth();
        if(r!=null)
            w+=r.getWidth();
        return w;
    }
    public void calu_balance(){
        int lh=(l==null?0:l.getHeight());
        int rh=(r==null?0:r.getHeight());
        balance=lh-rh;
    }
    //前序遍历
    public void before_trav(){
        System.out.println(v);
        if(l!=null){
            l.before_trav();
        }
        if(r!=null){
            r.before_trav();
        }
    }
    //中序遍历
    public void mid_trav(){
        if(l!=null){
            l.mid_trav();
        }
        System.out.println(v);
        if(r!=null){
            r.mid_trav();
        }
    }
    //后序遍历
    public void after_trav(){
        if(l!=null){
            l.after_trav();
        }
        if(r!=null){
            r.after_trav();
        }
        System.out.println(v);
    }
}

相关文章

  • LeetCode基础算法-树

    LeetCode基础算法-树 LeetCode 树 基础算法 1. 二叉树的最大深度 给定一个二叉树,找出其最大深...

  • 树数据结构-力扣刷树题需要知道的(Python)

    树是一种重要的数据结构,而二叉树是其中的重点和难点,有关二叉树的基础知识,读者可移步【二叉树基础】查看更多内容。这...

  • 二叉树的基本算法

    二叉树的基本算法 树、二叉树 的基本概念,参考数据结构算法之美-23讲二叉树基础(上):树、二叉树[https:/...

  • Java后端开发算法基础面试题分享,你离大厂也许就差这份面试题!

    一、算法基础 1. 重建二叉树 题目: 输入一棵二叉树前序遍历和中序遍历的结果,请重建该二叉树。 注意: 二叉树中...

  • 二叉树知识(BST) 二叉查找树(Binary Search T

    二叉树基础知识总结 - CSDN博客 二叉树遍历分析 简单二叉树遍历,可分为:先序,中序,后序。 先序: 1.访问...

  • 二叉树非递归遍历

    二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有...

  • 数据结构第三次作业

    第一题:二叉树的基础算法 题目 先根据二叉树的先序、中序遍历序列还原该二叉树,求出这棵二叉树的高度和宽度,以及其叶...

  • Avl平衡树--C语言实现

    Avl 平衡树 实现记录 Avl平衡二叉树和搜索二叉树基本实现原理相同,在搜索二叉树的基础上添加树平衡的操作--单...

  • 二叉树的遍历

    关于二叉树的算法问题,一般都以二叉树的遍历为基础,这里给出二叉树的多种遍历方式 树结构: 树结点的定义及其构建: ...

  • 学习清单

    算法、数据结构二叉树、链表、栈... golang基础 swoole mysql websocket

网友评论

      本文标题:二叉树基础

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