当前位置:首页 > 日记 > 正文

JS二叉树的简单实现方法示例

JS二叉树的简单实现方法示例

本文实例讲述了JS二叉树的简单实现方法。分享给大家供大家参考,具体如下:

今天学习了一下 二叉树的实现,在此记录一下

简单的二叉树实现,并且实现升序和降序排序输出

function Node(data , left,right){  this.data = data;  this.left = left;  this.right = right;  this.show = show;  function show(){    return this.data;  }};function Bst(){  this.root = null;  this.insert = insert;//插入  this.inOrder = inOrder;//中序遍历(升序)  this.inOrderDesc = inOrderDesc;//中序遍历(降序)  this.preOrder = preOrder;//先序遍历  this.postOrder = postOrder;//后续遍历  this.getMin = getMin;//最大值  this.getMax = getMax;//最小值  this.find = find;//查找值  this.remove = remove;//删除节点  this.count = count;//获取节点数量  function insert(data){    //创建一个新的节点    var newNode = new Node(data,null,null);    //判断是否存在根节点,没有将新节点存入    if(this.root == null){      this.root = newNode;    }else{      //获取根节点      var current = this.root;      var parent;      while(true){        //将当前节点保存为父节点        parent = current;        //将小的数据放在左节点        if(data < current.data){          //获取当前节点的左节点          //判断当前节点下的左节点是否有数据          current = current.left;          if(current == null){            //如果没有数据将新节点存入当前节点下的左节点            parent.left = newNode;            break;          }        }else{          current = current.right;          if(current == null){            parent.right = newNode;            break;          }        }      }    }  }  function inOrder(node){    var data = [];    _inOrder(node,data);    return data;  }  function inOrderDesc(node){    var data = [];    _inOrderDesc(node,data);    return data;  }  function preOrder(node){    var data = [];    _preOrder(node,data);    return data;  }  function postOrder(node){    var data = [];    _postOrder(node,data);    return data;  }  function _inOrder(node,data){    if(!(node == null)){      _inOrder(node.left,data);      data.push(node.show());      _inOrder(node.right,data);    }  }  function _inOrderDesc(node,data){    debugger;    if(!(node == null)){      _inOrderDesc(node.right,data);      data.push(node.show());      _inOrderDesc(node.left,data);    }  }  function _preOrder(node,data){    if(!(node == null)){      data.push(node.show());      _preOrder(node.left,data);      _preOrder(node.right,data);    }  }  function _postOrder(node,data){    if(!(node == null)){      _postOrder(node.left,data);      _postOrder(node.right,data);      data.push(node.show());    }  }  function getMin(){    var current = this.root;    while(!(current.left == null)){    current = current.left;    }    return current.data;  }  function getMax(){    var current = this.root;    while(!(current.right == null)){    current = current.right;    }    return current.data;  }  function find(data){    var current = this.root;    while(current != null){      if(data == current.data){        return current;      }else if(data < current.data){        current = current.left;      }else{        current = current.right;      }    }    return null;  }  function getSmallest(node){    var current = node;    while(!(current.left == null)){      current = current.left;    }    return current;  }  function remove(data){    root = removeNode(this.root,data);  }  function removeNode(node,data){    if(node == null){      return null;    }    if(data == node.data){      //如果没有只节点      if(node.left == null && node.right){        return null;      }      //如果没有左节点      if(node.left == null){        return node.right;      }      //如果没有右节点      if(node.right == null){        return node.left;      }      //有两节点      var tempNode = getSmallest(node.right);      node.data = tempNode.data;      node.right = removeNode(node.right,tempNode.data);      return node;    }else if(data < node.data){      node.left = removeNode(node.left,data);      return node;    }else{      node.right = removeNode(node.right,data);      return node;    }  }  function count(){    var counts = 0;    var current = this.root;    if(current == null){      return counts;    }    return _count(current,counts);  }  function _count(node,counts){    debugger;    if(!(node == null)){      counts ++;      counts = _count(node.left,counts);;      counts = _count(node.right,counts);    }    return counts;  }}

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数据结构与算法技巧总结》、《JavaScript数学运算用法总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

相关文章

Photoshop调整等高线和纹理制作巧

Photoshop调整等高线和纹理制作巧

纹理,文字,调整,等高线,电脑软件, 本例主要讲解如何利用等高线和纹理制作巧克力质感文字效果。首先输入文字并填充棕色,然后利用斜面和浮雕样式制作文字浮雕效果,最后通过调整等高线和纹理制作巧克力质感文字效果。有兴趣的朋友可以参考本文…

Vue-Cli中自定义过滤器的实现代码

Vue-Cli中自定义过滤器的实现代码

过滤器,自定义,代码,电脑软件,Vue,本文主要介绍了Vue-Cli中自定义过滤器,分享给大家,也给自己做个笔记vue2里面移除了内置过滤器,所有过滤器都需要自己定义。以下例子是使用webpack模版自定义一个日期格式过滤器的例子。文件结构.├── src│…

利用JavaScript实现栈的数据结构示

利用JavaScript实现栈的数据结构示

示例代码,数据结构,电脑软件,JavaScript,前言本文主要给大家介绍的是关于JavaScript实现栈的数据结构的相关内容,分享出来供大家参考学习,话不多少,来一起看看详细的介绍:堆栈(英语:stack),也可直接称栈,在计算机科学中,是一种特殊的串列形式的数据结…

微信小程序实现页面跳转传值的方法

微信小程序实现页面跳转传值的方法

传值,方法,页面跳转,程序,电脑软件,微信小程序实现页面跳转传值的方法比如从index。wxml跳转到aaa.wxmlindex.wml<navigator url="../aaa/aaa?id=1" > </navigator>传到aaa。wxml的时候传过去的值为id=1,则需要在aaa.wxml 的js获取到id=1a…

photoshop打造自己的节日礼花

photoshop打造自己的节日礼花

自己的,礼花,节日,电脑软件,photoshop,要成为一名合格的平面设计者就要学会打造自己的素材,在这里先教会大家制作自己的节日礼花,不会的朋友可以参考本文。步骤:1、首先打开photoshop并新建一个绘图画布。要注意设置颜色模式。背景根据自己的…

ps怎么设计绿竹子文字效果?

ps怎么设计绿竹子文字效果?

绿竹,文字效果,电脑软件,ps,ps制作竹字效果,看上去绿绿的,很漂亮的,下面我们就来看看详细的制作方法。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、在ps软件中,新建一个800*800的文档,背景色拉一个天蓝…

微信小程序 共用变量值的实现

微信小程序 共用变量值的实现

程序,变量值,电脑软件,微信小,微信小程序 共用变量值的实现举个例子,比如从商品管理列表页,相对自己发布的商品进行修改,点击修改按钮,通过 activityId 唯一标识进行修个这个商品, 这个activityId 我们可以通过 页面跳转传值,在 onLoad 里获取到…

Photoshop简单透明干净的玻璃网页

Photoshop简单透明干净的玻璃网页

网页,透明,按钮,干净,玻璃,怎样在photoshop中创建一个透明玻璃效果的干净的网页用按钮.按钮主要就是质感的表现,处理好这方面基本上没用什么难度的,今天小编就为大家详细介绍一下,来看看吧!步骤1、新建图层,命名为 &ldquo;box&rdquo;。用圆角矩…

如何在WORD2007中制作个性名片WORD

如何在WORD2007中制作个性名片WORD

方法,名片,个性,如何在,电脑软件,  想制作一个属于自己的个性名片吗?呵呵,小编教你用常用的WORD文档打造自己的个性名片,跟小编一起做吧!WORD2007中制作个性名片的方法WORD2007制作个性名片步骤1:双击打开word文档,如图:WORD2007中制作个性名…

NodeJs中express框架的send | 方法

NodeJs中express框架的send | 方法

方法,框架,简介,电脑软件,NodeJs,express框架的send方法①send方法用的还挺多的,因此需要明确其作用;②原型是:res.send([body|status], [body])即既可以直接发送内容,也可以第一个参数状态,第二个参数内容。如果直接发送内容的话,状态会被自动补…

wps文字怎么修改为不能编辑

wps文字怎么修改为不能编辑

文字,修改,方法,只读,模式,  为了防止别人修改我们的wps文档,我们可以将其设置为只读模式,那么,如何设置呢?其实方法很简单,不懂的朋友会请多多学习哦。下面就让小编告诉你如何将wps文档设置为只读模式的方法。wps文字修改只读模式的方法打开…

ps怎么给制作放大缩小的动画效果?

ps怎么给制作放大缩小的动画效果?

动画效果,放大缩小,电脑软件,ps,今天我们给一张图片做一个放大缩小的动画效果,第一部分重点说明如何在这个软件中制作所用到的相片或图片操作,第二部分将介绍如果在把制作好的相片制作成动画,制作过程很简单,主要是使用时间轴来完成的,下面我们…