JS算法之二叉树排序

二叉树:

<script type="text/javascript">
            //定义每个节点的模型,每个节点都分中心节点,左右节点三个节点,节点也可能成为树
            function arrayAct(){
                      this.value = null;
                      this.left = null;
                      this.right = null;
                  }
            /*
            *拿数组的第一个数据作为根节点,下面的每个节点都是一个新的对象,分别以不同的中心节点
            *判断左右节点的归属,最后形成一个二叉树
            */
          arrayAct.prototype.add = function(data){
              if (!data) {
                  return;
              };
                            if (this.value == null) {
                  this.value = data;
                  return;
              };
            //定义最中心的中心节点
               var code = new arrayAct();
              code.value = data;
              if (this.value >= data) {
                  if (this.left == null) {
                      this.left = code;
                  }else{
                      this.left.add(data);
                  }
              }else{
                  if (this.right == null) {
                      this.right = code;
                  }else{
                      this.right.add(data);
                  }
              }
          }  
          arrayAct.prototype.print = function(data){        //递归采用栈的方式存储,所以会循环调用
              if (this.left) {
                  console.log(this)
                  this.left.print(data);
              };
              data.push(this.value);
              if (this.right) {
                  console.log(this)
                  this.right.print(data);
              };
          }
              function app(){
                      var array = [2,6,56,102,5,4,47,7000,200,45,24,85,63,954,6222,5],
                      re = [];
                      sortArray = new arrayAct();
                      for (var i = 0; i < array.length; i++) {
                          sortArray.add(array[i]);
                      };
                      console.log(sortArray)
                      sortArray.print(re);
                      console.log(re)
            }
          app();  
        </script>
时间: 2025-01-04 20:48:08

JS算法之二叉树排序的相关文章

一步一步写算法(之排序二叉树)

原文:一步一步写算法(之排序二叉树) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面我们讲过双向链表的数据结构.每一个循环节点有两个指针,一个指向前面一个节点,一个指向后继节点,这样所有的节点像一颗颗珍珠一样被一根线穿在了一起.然而今天我们讨论的数据结构却有一点不同,它有三个节点.它是这样定义的: typedef struct _TREE_NODE { int data; struct _TREE_NODE* parent; str

一步一步写算法(之排序二叉树线索化)

原文:一步一步写算法(之排序二叉树线索化) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面我们谈到了排序二叉树,还没有熟悉的同学可以看一下这个,二叉树基本操作.二叉树插入.二叉树删除1.删除2.删除3.但是排序二叉树也不是没有缺点,比如说,如果我们想在排序二叉树中删除一段数据的节点怎么办呢?按照现在的结构,我们只能一个一个数据查找验证,首先看看在不在排序二叉树中,如果在那么删除:如果没有这个数据,那么继续查找.那么有没有方法,可以保

一步一步写算法(之排序二叉树的保存和加载)

原文:一步一步写算法(之排序二叉树的保存和加载) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 排序二叉树是我们开发中经常使用到的一种数据结构,它具有较好的插入.删除.查找特性.但是由于二叉树的指针较多,所以相比较其他的数据结构而言,二叉树来得比较麻烦些.但是也不是没有办法,下面介绍一下我个人常用的方法. 我们知道,如果一个二叉树是一个满树的话,那么二叉树的节点应该是按照1.2.3.4依次排开的.但是现实情况是这样的,由于排序二叉树自身

一步一步写算法(之排序二叉树删除-2)

原文:一步一步写算法(之排序二叉树删除-2) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 2.4 删除节点的左右子树都存在,此时又会分成两种情形 1)左节点是当前左子树的最大节点,此时只需要用左节点代替根节点即可 /* * * 10 ======> 6 * / \ / * 6 15 5 15 * / * 5 */ 代码该怎么编写呢? STATUS delete_node_from_tree(TREE_NODE** ppTreeNode

一步一步写算法(之排序二叉树删除-3)

原文:一步一步写算法(之排序二叉树删除-3) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 3 普通节点的删除 3.1 删除的节点没有左子树,也没有右子树 测试用例1: 删除节点6 /* * * 10 ======> 10 * / \ * 6 15 15 * */ static void test8() { TREE_NODE* pTreeNode = NULL; assert(TRUE == insert_node_into_tree

一步一步写算法(之排序二叉树插入)

原文:一步一步写算法(之排序二叉树插入) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 二叉树的节点插入比较简单.一般来说,二叉树的插入主要分为以下两个步骤: 1) 对当前的参数进行判断,因为需要考虑到头结点,所以我们使用了指针的指针作为函数的输入参数 2) 分情况讨论: 如果原来二叉树连根节点都没有,那么这个新插入的数据就是根节点: 如果原来的二叉树有根节点,那我们判断这个数据是否存在过,如果存在,那么返回:如果不存在,那么继续插入数

一步一步写算法(之排序二叉树删除-1)

原文:一步一步写算法(之排序二叉树删除-1) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 相比较节点的添加,平衡二叉树的删除要复杂一些.因为在删除的过程中,你要考虑到不同的情况,针对每一种不同的情况,你要有针对性的反应和调整.所以在代码编写的过程中,我们可以一边写代码,一边写测试用例.编写测试用例不光可以验证我们编写的代码是否正确,还能不断提高我们开发代码的自信心.这样,即使我们在开发过程对代码进行修改或者优化也不会担心害怕.然而看起

数据结构与算法之——八大排序算法

附:关于这个主题,网上好的文章已经数不胜数,本篇是整合后的文章. 正文: 一.概述 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 本文所指八大排序就是内部排序. 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序.堆排序或归并排序序. 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短: 二.排序算法详述 1.

普林斯顿公开课 算法3-7:排序算法复杂度

算法复杂度用来表示在解决某个问题时,算法的性能表现. 复杂度上限,就是某个具体的已经实现的算法能够保证在一定时间内解决问题 复杂度下限,就是通过数学方法证明,所有的算法都必须花费一定的时间才能解决问题 最优化算法,就是可能达到的最小复杂度的算法,通常介于复杂度上限和下限之间 比如排序问题中: 计算模型为决策树 使用比较次数作为开销依据 复杂度上限:使用归并排序可以达到N lgN复杂度 复杂度下限:? 最优化算法:? 决策树举例 有三个不同的元素a b c,通过比较的方式来得出排序结果.那么它的决