美文网首页
数据结构(7) 完全二叉树

数据结构(7) 完全二叉树

作者: Yossef | 来源:发表于2018-01-20 15:21 被阅读0次

完全二叉树:

若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。

也就是说除了最底下一层可以不满,上面的层都得满节点,而且最底下一层也必须集中在最左边。可以说,右边有左边就一定满,下面有,上面就一定满。

完全二叉树
非完全二叉树
非完全二叉树

用js写一个完全二叉树:

//写一个节点编号,因为完全二叉树遵循右边有左边一定满,下面有,上面一定满,但二叉树又是左小右大的插入规则,所以没有特定的一串值很难变成完全二叉树,所以我们给每个节点按顺序放上编号,如果前面的不存在,就给他一个null值以达到完全二叉树的规则;

带节点编号的完全二叉树

从上图我们可以发现一个规律 左节点的编号是其父节点的编号乘2加1 右节点的编号是其父节点的编号乘2加2 掌握这个规律 对节点的插入就容易了很多

function Node(number,value){//number就是节点编号

        this.value = value||null;

        this.left = null;

        this.right = null;

        this.number = number||0;

        this.add = function(value){

            if(this.value == null){

                this.value = value;

                return 0;

            }

            if(value<this.value){

                if(this.left!=null){

                        this.left.add(value);

                }else{

                        num = 2*this.number+1;

                        this.left = new Node(num,value);

                        return num;

                }    

            }else{

                if(this.right!=null){

                        this.right.add(value);

                }else{

                        num = 2*this.number+2;

                        this.right = new Node(num,value);

                        return num;//返回节点编号

                }

            }

        } //这种插入节点的方法就是普通的加入节点的方法只是多返回一个节点编号 并不能构成完全二叉树,所以我们还要下一个补充不够的节点的方法

        this.fullup = function(nodeId){

                if(this.number<nodeId){//防止加多,所以先要判断是不是小于最后一个节点

                        if(this.left == null){//先找左

                                num = 2*this.number+1;

                                if(num<nodeId){//在判断一次 防止加多

                                      this.left = new Node(num)

                                }else{

                                        return;

                                }

                        }

                        this.left.fullup(nodeId);

                        if(this.right == null){//找右

                                num = 2*this.number+2;

                                if(num<nodeId){

                                        this.right = new Node(num);

                                }else{

                                        return;

                                }

                        }

                        this.right.fullup(nodeId);

                }

        }

        //递归遍历 前几章有讲解 这章不多做解释了。

        this.iterate=function(arr){

                if(this.left!=null){

                        this.left.iterate(arr);

                }

                if(this.value!=null){

                        arr.push(this.value);

                 }

                 if(this.right!=null){

                        this.right.iterate(arr);

                  }

         }

}

//创建一个完全二叉树的类 用来添加节点以及遍历节点

function CompleteTree(){

        this.root=null;

        this.add=function(value){

                if(this.root!=null){

                        nodeId = this.root.add(value);

                        this.root.fullup(nodeId);

                }else{

                        this.root = new Node(0,value);

                }

        }

        this.iterate=function(){

                arr = [];

                this.root.iterate(arr);

                return arr;

         }

相关文章

  • 认识二叉堆

    什么是二叉堆? 二叉堆本质上是一种完全二叉树( 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引...

  • 数据结构之二叉树(一)——绪论

    前言 二叉树是数据结构中一种重要的数据结构,也是树表家族最为基础的结构,包括完全二叉树、满二叉树、二叉查找树、AV...

  • 数据结构---堆

    导语 堆的逻辑数据结构实际上是一个可以使用数组实现的完全二叉树(堆也一定是平衡二叉树),所以学习堆,完全二叉树不是...

  • 数据结构(7) 完全二叉树

    完全二叉树: 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所...

  • 堆排序

    数据结构堆 是一颗完全二叉树。完全二叉树:设二叉树的深度为h,除了第h层以外,前面的每一层的节点数都达到最大,并且...

  • 2018年6月5日

    上午:数据结构 ①树的定义,结点数,高度,度之间的关系 ②二叉树 满二叉树,完全二叉树的性质 下午 高数: 导数与...

  • 不可多得的后端架构师技术图谱!内附参考资料!

    数据结构 二叉树 完全二叉树 平衡二叉树 二叉查找树(BST) 红黑树 B-,B+,B*树 LSM 树 队列 集合...

  • 图解“红黑树”原理,一看就明白

    学过数据结构都知道二叉树的概念,而又有多种比较常见的二叉树类型,比如完全二叉树、满二叉树、二叉搜索树、均衡二叉树、...

  • 红黑树(R-B tree)原理图文详解

    文章来源:网络 引言: 学过数据数据结构都知道二叉树的概念,而又有多种比较常见的二叉树类型,比如完全二叉树、满二叉...

  • 数据结构--树

    树 树是很常见而且被广泛利用的数据结构,而且种类繁多,包括一般二叉树、完全二叉树、满二叉树、线索二叉树、二叉排序树...

网友评论

      本文标题:数据结构(7) 完全二叉树

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