二叉树系列(1)-实现排序二叉树
排序二叉树就是在一棵普通的数的基础上,一个节点的左节点的值一定小于这个节点的值,右节点的值大于这个节点的值。
每棵树都是由节点生成的,每个节点都有左右节点两个属性,用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)-实现排序二叉树相关推荐
- 排序二叉树BST(binary search/sort tree)
之前介绍说,树这种存储结构,能提高数据的存储,读取效率.所以树的应用就可以体现在排序这一方面,比如有排序二叉树,平衡二叉树,红黑树等.本文介绍排序二叉树. 为啥有排序二叉树(二叉搜索树)的出现?这要从 ...
- 记忆化搜索 codevs 2241 排序二叉树
codevs 2241 排序二叉树 ★ 输入文件:bstree.in 输出文件:bstree.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 一个边长为n的正 ...
- 数据结构_排序二叉树(C语言)
数据结构总目录 排序二叉树 1. 结构解析 排序二叉树的结构规则很简单,只遵循一个基本规则: 那就是在二叉树中,选择任意根结点,其左子树都比根节点小,右子树都比根节点大. 排序二叉树结构图 观察如下二 ...
- 【树的四种遍历方法(遍历排序二叉树)】
文章目录 一.建立一个排序二叉树 二.四种遍历 前言 这里先给出建立一颗普通的排序二叉树,平衡二叉树的建立以及操作,等复习到再写吧. 一.排序二叉树 排序二叉树,即当前节点左子树 < 当前节点 ...
- 排序二叉树,平衡二叉树和红黑树的概念以及相关的操作讲解
1. 排序二叉树 排序二叉树是一种特殊结构的二叉树,可以非常方便地对树中所有节点进行排序和检索. 排序二叉树要么是一棵空二叉树,要么是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有节点的值均 ...
- 数据结构之二叉搜索树/二叉查找数/有序二叉树/排序二叉树
概念~ 二叉查找树(英语:Binary Search Tree),也称二叉搜索树.有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree), ...
- 查找(三)——基于平衡二叉树的查找(对排序二叉树的改进)
基于平衡二叉排序树的查找(AVL树) 这一篇博客里总结一下基于平衡二叉树的查找,为什么会有这种查找呢?平衡二叉树又是什么东西呢?现在就来仔细理解一下! 在基于二叉排序树的查找里,我们可以得到的时间复杂 ...
- C++11 智能指针unique_ptr使用 -- 以排序二叉树为例
http://www.cnblogs.com/fstang/p/3947552.html 用智能指针可以简化内存管理.以树为例,如果用普通指针,通常是在插入新节点时用new,在析构函数中调用delet ...
- 一步一图一代码之排序二叉树
作者:禅楼望月(http://www.cnblogs.com/yaoyinglong/) 属性: ①若它的左子树不为空,则左子树上所有节点的值均小于它的根节点的值. ②若它的右子树不为空,则右子树上所 ...
最新文章
- 感知机模型及其对偶形式
- uva-10152-乌龟排序
- VS2008下编的程序生成的EXE 在没有安装VS2008的计算机上能运行
- Java中的Runtime类详解
- Spring原理只要看这篇文章就够了
- 作者:刘阳(1988-),男,军事医学科学院放射与辐射医学研究所博士生
- 使用PyCharm连接云主机教程
- 测试里程突破 1000 万英里,但 Waymo 的商业模式真的万无一失?
- HackingTeam重磅炸弹: 估值超1000万美金带有军火交易性质的木马病毒以及远控源码泄露
- php httputils,Android 自定义网络加载工具类 HttpURLConnectionUtils
- 为什么我只贴代码不给你们源码?
- 解决PlayerSettings中的splash Image资源发现在内存中卸载不掉
- discuz核心类库class_core的函数注释
- 一分钟读懂马云在互联网大会的万字
- 情感充沛,去体悟生活
- 汽车电子功能安全标准ISO26262解析(四)——FMEDA
- 5. 求cosx计算公式
- 木马冰河之原理篇(深入浅出看木马)
- 【转载】最热门的CPLD-FPGA论坛
- 【node.js】nvm安装最新教程