排序二叉树就是在一棵普通的数的基础上,一个节点的左节点的值一定小于这个节点的值,右节点的值大于这个节点的值。
每棵树都是由节点生成的,每个节点都有左右节点两个属性,用JS来实现如下:

function  Node(data){this.data = data;this.left = null;this.right = null;
}

每棵树都是由根节点构成,且树本身需要一个插入的方法

function  BST(){this.root = null;this.insert = insert;
}

下面我们看看这个插入的方法该怎么写,
1、判断根节点是否为空,如果是,将新插入的节点设置为根节点
2、拿需要插入的数据与根节点进行比较,如果大于根节点,取根节点的右节点node,否则取根节点的左节点node
3、判断节点node是否为空,如果为空,将该节点的值设置为插入值,否则将该节点视为根节点,重复步骤1-3
具体的实现如下:

function  insert(data){let node = new Node(data);if(!this.root){this.root = node;}else{let parent = this.root;let currnet;while(true){current = parent;if( data > current.data ){parent= parent.right;if(!parent){current .right = node;break;}}else{parent= parent.left;if(!parent){current .left = node;break;}}}}
}

下面我们测试一下:

let  bst1 = new BST();
bst1.insert(3);
bst1.insert(5);
bst1.insert(2);
bst1.insert(1);
bst1.insert(4);
console.log(bst1);

得到如下结果

如此,就实现了一个排序二叉树的数据结构了。
以上的insert方法有一点需要注意,遍历的过程中,需要用cureent来保存当前节点,避免指针的丢失。

二叉树系列(1)-实现排序二叉树相关推荐

  1. 排序二叉树BST(binary search/sort tree)

    之前介绍说,树这种存储结构,能提高数据的存储,读取效率.所以树的应用就可以体现在排序这一方面,比如有排序二叉树,平衡二叉树,红黑树等.本文介绍排序二叉树. 为啥有排序二叉树(二叉搜索树)的出现?这要从 ...

  2. 记忆化搜索 codevs 2241 排序二叉树

    codevs 2241 排序二叉树 ★   输入文件:bstree.in   输出文件:bstree.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] 一个边长为n的正 ...

  3. 数据结构_排序二叉树(C语言)

    数据结构总目录 排序二叉树 1. 结构解析 排序二叉树的结构规则很简单,只遵循一个基本规则: 那就是在二叉树中,选择任意根结点,其左子树都比根节点小,右子树都比根节点大. 排序二叉树结构图 观察如下二 ...

  4. 【树的四种遍历方法(遍历排序二叉树)】

    文章目录 一.建立一个排序二叉树 二.四种遍历 前言 这里先给出建立一颗普通的排序二叉树,平衡二叉树的建立以及操作,等复习到再写吧. 一.排序二叉树 排序二叉树,即当前节点左子树 < 当前节点 ...

  5. 排序二叉树,平衡二叉树和红黑树的概念以及相关的操作讲解

    1. 排序二叉树 排序二叉树是一种特殊结构的二叉树,可以非常方便地对树中所有节点进行排序和检索. 排序二叉树要么是一棵空二叉树,要么是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有节点的值均 ...

  6. 数据结构之二叉搜索树/二叉查找数/有序二叉树/排序二叉树

    概念~ 二叉查找树(英语:Binary Search Tree),也称二叉搜索树.有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree), ...

  7. 查找(三)——基于平衡二叉树的查找(对排序二叉树的改进)

    基于平衡二叉排序树的查找(AVL树) 这一篇博客里总结一下基于平衡二叉树的查找,为什么会有这种查找呢?平衡二叉树又是什么东西呢?现在就来仔细理解一下! 在基于二叉排序树的查找里,我们可以得到的时间复杂 ...

  8. C++11 智能指针unique_ptr使用 -- 以排序二叉树为例

    http://www.cnblogs.com/fstang/p/3947552.html 用智能指针可以简化内存管理.以树为例,如果用普通指针,通常是在插入新节点时用new,在析构函数中调用delet ...

  9. 一步一图一代码之排序二叉树

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong/) 属性: ①若它的左子树不为空,则左子树上所有节点的值均小于它的根节点的值. ②若它的右子树不为空,则右子树上所 ...

最新文章

  1. 感知机模型及其对偶形式
  2. uva-10152-乌龟排序
  3. VS2008下编的程序生成的EXE 在没有安装VS2008的计算机上能运行
  4. Java中的Runtime类详解
  5. Spring原理只要看这篇文章就够了
  6. 作者:刘阳(1988-),男,军事医学科学院放射与辐射医学研究所博士生
  7. 使用PyCharm连接云主机教程
  8. 测试里程突破 1000 万英里,但 Waymo 的商业模式真的万无一失?
  9. HackingTeam重磅炸弹: 估值超1000万美金带有军火交易性质的木马病毒以及远控源码泄露
  10. php httputils,Android 自定义网络加载工具类 HttpURLConnectionUtils
  11. 为什么我只贴代码不给你们源码?
  12. 解决PlayerSettings中的splash Image资源发现在内存中卸载不掉
  13. discuz核心类库class_core的函数注释
  14. 一分钟读懂马云在互联网大会的万字
  15. 情感充沛,去体悟生活
  16. 汽车电子功能安全标准ISO26262解析(四)——FMEDA
  17. 5. 求cosx计算公式
  18. 木马冰河之原理篇(深入浅出看木马)
  19. 【转载】最热门的CPLD-FPGA论坛
  20. 【node.js】nvm安装最新教程

热门文章

  1. LCD液晶屏显示接口总结
  2. npm,cnpm的基本使用
  3. VC界面程序中文字乱码问题
  4. springboot添加切面
  5. Jzoj4745 看电影
  6. C语言中的标识符有:关键字、预定义标识符、用户标识符
  7. autojs悬浮窗点击穿透
  8. CSS清除浮动的方法
  9. python支持char数据类型吗_python有char类型吗,
  10. 4、Android 手机端进行实时目标检测,并使用FFMPEG将检测的视频流推到服务器显示