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

JavaScript 排序二叉树

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

JavaScript 排序二叉树

记录学习 Javascript 二叉树

自己也做了一段时间编程了,没有系统学习计算机的相关知识,现在仅凭,对编程的爱好,慢慢前进。
现在算是,有一点能力了。
但是,数据结构,还是有点欠缺的。
还好对于面向对象有点了解,现在就把老师用面向过程写的二叉树,用面向对象重写,毕竟面向对象,是现在,解决问题的有效的方式。

原课程地址: Javascript实现二叉树算法

改用面向对象写出来后发现扩展和使用起来非常方便,比如获取降序升序数组,
生成排序二叉树: var s = new bTree([8,6,2,4,7,5,6,7,9,5,2,3,4]);
获取降序数组: var down = s.down();
获取升序数组:var up = s.up();
面向对象的好处之一,每个节点都会有相应方法,比如这样:
获取父节点 左侧降序: var leftDown = s.left.down();
获取父节点 右侧升序:var rightUp = s.right.up();
还可以这样,获取父节点,左侧节点 的 右侧节点 的升序:
var lrUp = s.left.right.up(); (前提是 你要有那个节点)

这里可以扩展出方法 传入一个获取顺序,这个方法 按照这个顺序在自身上查询排序,如果没有返回空数组或者false;

2018年11月10日 03:13:27
添加 安全获取指定顺序下的排序方式。

 
 function bTree(arr){
     if(Array.isArray(arr)){
  this.arr = arr;
  this._init();
  return this;
     }
     if(!Number.isInteger(arr)){
  arr = parseFloat(arr);
  if(isNaN(arr)){
      return false;
  }
     }
     this.key = arr;
 }

 bTree.prototype = {
     constructor:bTree,
     
     _init(){
  if(this.key || !Array.isArray(this.arr)){
      return false;
  }
  this.arr.forEach(function (v, k) {
      this._each(v);
  }.bind(this));
  delete this.arr;
     },
     
     _each(value) {
  if(!this.key){
      this.key = value;
      return this;
  }
  if(this.key > value) {
      if(!this.left){
   return this._setKey('left', value);
      }
      return this.left._each(value);
  } else if(this.key < value) {
      if(!this.right){
   return this._setKey('right', value);
      }
      return this.right._each(value);
  }
  if(!this.left){
      return this._setKey('left', value);
  }
  if(!this.right){
      return this._setKey('right', value);
  }
  var l = this.left;
  this._setKey('left', value);
  this.left.left = l;
  return this;
     },
     
     _setKey(name, value) {
  this[name] = new this.constructor(value);
  return this;
     },
     
     up(ret){
  ret =  ret || [];
  if(this.left){
      this.left.up(ret);
  }
  // console.log(this.key);
  ret.push(this.key);
  if(this.right){
      this.right.up(ret);
  }
  return ret;
     },
     
     down(ret) {
  ret = ret || [];
  if(this.right){
      this.right.down(ret);
  } 
  // console.log(this.key);
  ret.push(this.key);
  if(this.left){
      this.left.down(ret);
  }
  return ret;
     },
     
     getUp() {
  var arr = this._parseArg.apply(this, arguments);
  var ret = this._parseObj(arr);
  if(!ret){
      return ret;
  }
  return ret.up();
     },
     
     getDown() {
  var arr = this._parseArg.apply(this, arguments);
  var ret = this._parseObj(arr);
  if(!ret){
      return ret;
  }
  return ret.down();
     },
     
     _parseArg() {
  var arg = Array.prototype.join.call(arguments, '.');
  var r = /([^.]+)+/gi;
  var arr = arg.match(r);
  return arr;
     },
     
     _parseObj (arr) {
  if(!Array.isArray(arr)){
      return undefined;
  }
  arr.forEach(function (v, k) {
      if(v!=='left' && v!=='right'){
   return true;
      }
      if(!ret[v]){
   ret = undefined;
   return false;
      }
      ret = ret[v];
  });
  return ret;
     }
 };

 var arr = [3,10,1,6,4,7,13,14, 3, 8, 9];

 var b = new bTree(arr);

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

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

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