js数据结构

javascript实现二叉查找树

从毕业到入职已经过去了两个月,从现在开始好好学习开始积累自己遇到 的问题写博客做笔记。
最近公司的做后台管理系统其中有vue技术栈的也有react技术栈的,但无论是什么技术栈后台管理系统,我认为最难得点就是权限控制,这其中前端涉及道路静态路由、动态路由设计和生成控制,根据路由表动态生成动态菜单等。我发现无论什么后台项目所涉及到的权限控制数据的数据结构都是树结构,所以萌生了学习一下js版的数据结构,以方便后面的前端生涯,可以更好地处理与树模型相关的业务数据。

  1. 二叉树,二叉树是一种特殊的树,它的子节点个数不超过两个。二叉树具有一些特殊的计算性质,
    使得在它们之上的一些操作异常高效。
  2. 二叉查找树二叉树的一种特殊形态,所有存储的数据都是有序的。
    下面我们分别用javascript ES6之前语法和ES6语法实现二叉查找树:
    es5语法:
    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;
    }
    function insert(data) {
    var n = new Node(data, null, null);
    if (this.root == null) { // 二叉查找树是否为一个新树
    this.root = n;
    }
    else {
    var current = this.root;
    var parent;
    while (true) {
    parent = current;
    if (data < current.data) {// 一直找到左边合适的位置
    current = current.left;
    if (current == null) {
    parent.left = n;
    break;
    }
    }
    else {// 一直找到右边的合适的位置
    current = current.right;
    if (current == null) {
    parent.right = n;
    break;
    }
    }
    }
    }
    }
    function inOrder(node) {
    if (!(node == null)) {
    inOrder(node.left);
    console.log(node.show() + " ");
    inOrder(node.right);
    }
    }
    es6语法:
    class Node {
    constructor(data, left, right) {
    this.data = data
    this.left = left
    this.right = right
    }
    show() {
    return this.data
    }
    }

class BST {
constructor(root = null) {
this.root = null
}
insert(data) {
var n = new Node(data, null, null)
if (this.root === null) {
this.root = n
} else {
var current = this.root
var parent
while (true) {
parent = current
if (data < current.data) {
current = current.left
if(current=null){
parent.left = n
break
}
}else{
current = current.right
if(current
=null){
parent.right = n;
break
}
}
}
}
}
inOrder(tree) {
if(!(tree==null)){
this.inOrder(tree.left)
console.log(tree.show())
this.inOrder(tree.right)
}
}
}

const tree = new BST()
tree.insert(1)
tree.insert(7)
tree.insert(3)
tree.insert(2)
tree.insert(4)
tree.insert(5)
tree.insert(8)
tree.insert(9)
tree.insert(0)

tree.inOrder(tree.root)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值