1,所有圆圈都是一个节点,里面的数字就是节点的值。8上面没有父节点,那么8就是根节点,而4,7,13没有子节点了,称之为叶子结点。其他的称之为:中间结点

2,8节点是3和10的父节点,3是8的左孩子,10是8的右孩子。3和10 是兄弟节点,拥有共同一个父节点。

3,4和7是父节点6的兄弟节点。4是6的左孩子,7是6的右孩子。

4 , 8是第一层;3,10是第二层 ;1,6,14是第三层;4,7,13是第四层,层数称为二叉树的高为4。

排序二叉树的特点:

1,左孩子的值 < 父节点的值 < 右孩子的值  如上面 根节点8大于左孩子节点3,根节点8小于有孩子节点10,其他同理。

=======

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <script>
        var BinaryTree=function(){
            //初始化节点
            var Node=function(key){
                this.key=key;
                this.left=null;
                this.right=null;
            }
            //根节点
            var root=null;
            //给当前节点添加左右子节点
            var insertNode=function(node,newNode){
                if (newNode.key>node.key) {//大于当前节点,那就是右孩子节点
                    if (node.right===null) {//右孩子节点为空才给赋值为新节点
                        node.right=newNode;//这里的node.right进行节点赋值newNode.
                    }else{//如果当前右孩子不是空,那么给当前右孩子添加newNode添加孩子节点
                        insertNode(node.right,newNode);//递归,给node.right的节点添加子节点。
                    }
                }else{//小于当前节点,那就是左孩子节点
                    if (node.left===null) {
                        node.left=newNode;//这里的node.left进行节点赋值newNode.
                    }else{//判断左孩子节点是否为空
                        insertNode(node.left,newNode);//递归,给node.left的节点添加子节点。
                    }
                }
            }

//添加根节点
            this.insert=function(key){
                //实例化节点对象
                var newNode=new Node(key);
                //添加根节点
                if (root===null) {
                    root=newNode;
                }else{
                    //给当前节点添加子节点。
                    insertNode(root,newNode);
                }
            }
        }

//节点数组
        var nodes=[10,7,18,3,8,15,19,11,20,13];
        //实例化对象
        var BinaryTree=new BinaryTree();
        nodes.forEach(function(key){
            BinaryTree.insert(key);
        })
    </script>
</body>
</html>

=============

Javascritp 数据结构和二叉树算法的更多相关文章

  1. JavaScript实现二叉树算法

    二叉树的遍历方式 分别为中序遍历(左子树->当前节点->右子树).前序遍历(当前节点->左子树->右子树).后序遍历(左子树->右子树->当前节点).下面使用Jav ...

  2. 【Java】 大话数据结构(11) 查找算法(2)(二叉排序树/二叉搜索树)

    本文根据<大话数据结构>一书,实现了Java版的二叉排序树/二叉搜索树. 二叉排序树介绍 在上篇博客中,顺序表的插入和删除效率还可以,但查找效率很低:而有序线性表中,可以使用折半.插值.斐 ...

  3. 数据结构之BF算法,kmp算法,三元组,十字链表总结

    在这一章中,老师教了我们四种数据结构:BF算法,kmp算法,三元组和十字链表:还给我们讲了2019年团体天体赛中T1-8的AI题 1.对于BF和kmp算法,老师除了在课堂上讲解算法的主要核心思想外,还 ...

  4. python数据结构之二叉树的统计与转换实例

    python数据结构之二叉树的统计与转换实例 这篇文章主要介绍了python数据结构之二叉树的统计与转换实例,例如统计二叉树的叶子.分支节点,以及二叉树的左右两树互换等,需要的朋友可以参考下 一.获取 ...

  5. 算法与数据结构(三) 二叉树的遍历及其线索化(Swift版)

    前面两篇博客介绍了线性表的顺序存储与链式存储以及对应的操作,并且还聊了栈与队列的相关内容.本篇博客我们就继续聊数据结构的相关东西,并且所涉及的相关Demo依然使用面向对象语言Swift来表示.本篇博客 ...

  6. 算法与数据结构基础 - 二叉树(Binary Tree)

    二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树.右子树, 左右子树节点同样最多有两个子树. 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如Leet ...

  7. JS数据结构与算法 - 剑指offer二叉树算法题汇总

    ❗❗ 必看经验 在博主刷题期间,基本上是碰到一道二叉树就不会碰到一道就不会,有时候一个下午都在搞一道题,看别人解题思路就算能看懂,自己写就呵呵了.一气之下不刷了,改而先去把二叉树的基础算法给搞搞懂,然 ...

  8. ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树

    五.KMP算法:    *KMP算法是一种改进的字符串匹配算法.    *KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的.具体实现就是实现一个next()函 ...

  9. 数据结构(DataStructure)与算法(Algorithm)、STL应用

    catalogue . 引论 . 数据结构的概念 . 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 二叉树 . 物理结构实例 3.1 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...

随机推荐

  1. SQL SERVER 根据字段名称批量设置为主键

    --设置主键 --alter table 你的表名 add constraint pk_s primary key (id) SELECT 'alter table ' + TABLE_NAME + ...

  2. 2.6 数据库更新特定字段SQL/语句块

    1.更新单表中某一字段 1.1适用于单条或者因为in条件1-1000条数据 下面是更改CMS_CONTRACT_INFO 表中合同编号为CMCC987最后更新时间为当前时间,或者注释里特定时间. UP ...

  3. 【jmeter测试范例】001——TCP测试

    1.打开Jmeter(或者运行NewDriver.java启动Jmeter) 2.新建一个测试计划 ······ 3.新建线程组 4.设置线程组的参数 1.线程的数量 2.要在多久内完成,即每个请求发 ...

  4. (十三)mybatis 整合 ehcache

    目录 ehcache mybatis 的 Cache 接口 整合步骤 ehcache ehcache 是一个分布式缓存框架 ! 为什么需要分布式缓存? 在大型的项目中,服务器是肯定不止一台的,每台服务 ...

  5. CF1032B Personalized Cup

    一个多月前写的题,既然没人写题解,那蒟蒻就写一篇吧 基本思路 既然是输出任意一个解,那么号的位置在那里是没有关系的.我的思路是默认*号在最后面,然后对输入的字符串输出的行数进行分类. 代码 #incl ...

  6. redis键空间通知(keyspace notification)

    一.需求 在redis中,设置好key和生存时间之后,希望key过期被删除时能够及时的发送一个通知告诉我key,以便我做后续的一些操作. 二.环境 系统:windows10 php:7.1 redis ...

  7. DVWA漏洞演练平台 - SQL注入

    SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,具体来说,它是利用现有应用程序将(恶意的)SQL命令注入到后台数据库引擎执 ...

  8. Java String类源码

    String类的签名(JDK 8): public final class String implements java.io.Serializable, Comparable<String&g ...

  9. Linux Centos7 离线安装docker 【官网翻译和注释】

    Centos7的Docker安装 需要一个维护版本的centos7,所以6不行. 卸载旧版本 旧版本的docker被称为 docker or docker-engine 如果存在请删除它们. sudo ...

  10. django+uwsgi+nginx: websock 报502/400

    耽搁了近2个月,终于解决了,主要是nginx/uwsgi/django相关的配置: 一.django工程settings.py,添加 WEBSOCKET_FACTORY_CLASS = "d ...