概念和结构

  • 由若干节点组成。
  • 每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树。
  • 我们这里实现二叉搜索树。二叉搜索树,它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉搜索树。

二叉搜索树的操作

二叉搜索树有七种常用操作,分别为

  1. 插入节点 insert(value)
  2. 查找节点 search(value)
  3. 移除节点 remove(value)
  4. 遍历节点 traverse(value)
  5. 获取最小值 min()
  6. 获取最大值 max()
  7. 获取根节点 getRoot()

JS实现二叉树

JS里面的树结构需要通过对象(object)来实现。

var Tree = function(){//辅助类function Node(value){this.value = value;this.left = null;this.right = null;}//根节点var root = null;//插入节点this.insert = function(value){var newNode = new Node(value);if(root === null){root = newNode;}else{insertNode(root , newNode);}}//插入节点需要用到的函数function insertNode(node , newNode){if(newNode.value > node.value){//往右走if(node.right === null){node.right = newNode;}else{insertNode(node.right , newNode);}}else if(newNode.value < node.value){//往左走if(node.left === null){node.left = newNode;}else{insertNode(node.left , newNode);}}}//查找节点this.search = function(value){return search(root , value);}function search(node , value){if(node === null){return null;}else{if(value > node.value){//向右走return search(node.right , value);}else if(value < node.value){//向左走return search(node.left , value);}else{//返回这个节点return node;}}}//移除节点this.remove = function(value){root = removeNode(root , value);}//移除节点需要用到的函数function removeNode(node , value){//如果节点为空,返回nullif(node === null){return null;}else{if(value > node.value){//向右走node.right = removeNode(node.right , value);return node;}else if(value < node.value){//向左走node.left = removeNode(node.left , value);return node;}else{//移除这个节点//叶节点    if(node.left === null && node.right === null){return null;}//只有一个子节点的节点if(node.left !== null && node.right === null){return node.left;}else if(node.left === null && node.right !== null){return node.right;}//有两个子节点的节点,将这个节点值替换为右侧子树最小子节点值var rightMinValue = findMinNode(node.right);node.value = rightMinValue;node.right = removeNode(node.right , rightMinValue);return node;}}}//移除节点函数需要用到的寻找最小子节点函数function findMinNode(node){if(node === null){return null;}else{while(node.left){node = node.left;}return node.value;}}//遍历节点this.traverse = function(callback){traverse(root , callback);}//遍历节点需要用到的函数function traverse(node , callback){//节点为空则返回if(node === null){return;}else{// callback(node.value);       //前序遍历traverse(node.left , callback);// callback(node.value);       //中序遍历traverse(node.right , callback);callback(node.value);       //后序遍历}   }//获取最小值this.min = function(){return min(root);}//获取最小值需要用到的函数function min(node){//树为空返回nullif(node === null){return null;}else{while(node.left){node = node.left;}return node.value;}}//获取最大值this.max = function(){return max(root);}//获取最大值需要用到的函数function max(node){//树为空返回nullif(node === null){return null;}else{while(node.right){node = node.right;}return node.value;}}//获取根节点this.getRoot = function(){return root;}
}

JavaScript数据结构——树(Tree)相关推荐

  1. JavaScript数据结构——树Tree

    5.1 --简述 二叉树.AVL树.红黑树 根节点: 位于数顶部的节点: 内部节点: 存在子元素的节点: 外部节点: 没有子元素的节点: 树的深度: 节点的深度取决于它的祖先节点的数量: 树的高度: ...

  2. 数据结构树(Tree)详解

    树(tree) 树(Tree)的基本概念 定义 树的结构 二叉树 二叉树的特点 满二叉树 完全二叉树 二叉查找树(Binary Search Tree - BST,又称二叉排序树.二叉搜索树) AVL ...

  3. JavaScript数据结构——树

    文章目录 二叉树 二叉搜索树 insert() 树的遍历 中序 先序 后序 最小节点 最大节点 搜索指定值 一个树结构含有父子关系的节点,除了根节点外,每一个节点都一个父节点和0个或者多个子节点.如下 ...

  4. JavaScript 数据结构——树

    概念 树是一种分层数据的抽象模型. 树的常用操作: 深度优先遍历 广度优先遍历 实现 JavaScript中没有树,但是可用Object和Array来构建树,如上图中的树可表示为: const tre ...

  5. 走进数据结构 - 树(Tree)的世界

    前言:         树是各种数据结构中最重头戏的结构.树的各种分类及其子类的各种特征,也是在算法研究和实践中最有价值的学问.本人基于自己的学识和见闻,打算写一篇树的前世今生和树的大家族的介绍,由于 ...

  6. 数据结构 树(Tree)的基本知识

    树形结构的基本概念 节点(node): 树上的每一个元素都是节点 根节点: 一棵树最顶端的节点称为根节点 每棵树最多有一个根节点 空树没有根节点 父节点: 与一个节点直接连接,并且在它的头上的节点即是 ...

  7. JAVA数据结构知识点,数据结构 树Tree 知识点总结 附Leetcode力扣练习题答案

    先来明确下树的概念:明确的父子关系 正确的示例: 错误的示例: 几个名词: 节点:线两端的点即节点 根节点:无父节点的节点 叶子节点:无子节点的节点 几个概念: 高度:从下到上,从0计数,根节点最高 ...

  8. python tree结构_Python入门篇-数据结构树(tree)篇

    Python入门篇-数据结构树(tree)篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.树概述 1>.树的概念 非线性结构,每个元素可以有多个前躯和后继 树是n(n& ...

  9. JavaScript数据结构与算法 - 树

    1. 树数据结构 树是一种分层数据的抽象模型 树是一种非顺序的数据结构 树对于存储需要快速查找的数据非常有用 常见例子:如公司的组织架构图 树结构: 2. 二叉树和二叉搜索树 二叉树: 只能有左右两个 ...

最新文章

  1. 用友服务器整体迁移--数据库附加
  2. javascript   卸载事件(onunload)
  3. Robot Framework测试用例并行执行
  4. 火狐浏览器打印网页不全_武汉社保网上下载打印流程
  5. angular2 路由ajax,如何通过Javascript函数在Angular 2中实现AJAX
  6. PICT实现组合测试用例
  7. Git使用教程:最详细、最浅显、一文读懂Git常用操作!
  8. “最佳前任”!字节跳动给员工发春节红包,离职员工也有,最高6888元
  9. Codeforces 1041C(贪心+set)
  10. ffmpeg rtmp 推流错误WriteN, RTMP send error 10053 10038
  11. ios无痕埋点_掌握数据生命周期:初识数据埋点
  12. 联想X61-Xp系统重装Ubuntu21.10
  13. 微软改进的DSSM结构:
  14. sql server 2005 T-SQL ALTER SCHEMA (Transact-SQL)
  15. 通过路由器设置,不用IPTV盒子,局域网内、局域网外任意设备随时随地观看网络电视直播
  16. Photoshop CC 2017工具的使用
  17. 百度网址安全中心怎么取消拦截的详细解决办法
  18. 如何计算网站需要多大流量多大带宽
  19. Unity中使用插件在地形中制作道路
  20. Go入门案列1:实现一个家庭收支记账系统

热门文章

  1. String:字符串常量池
  2. vue-lazyload vue图片懒加载插件的使用记录
  3. 【绝对原创】最新研究成果,EFS加密文件真的可以解密!各位不要放弃哈~
  4. Windows Server 2012配置开机启动项
  5. spring冲刺第九天
  6. 常见的mysql集群
  7. python画互动图_利用Python画出运动图像
  8. 【github相关】之h264bitstream
  9. 电脑磁盘空间不足怎么办_Mac磁盘总是提示空间不足?学会这几招,瞬间腾出几个G...
  10. IDEA登录Github账号失败的解决办法