当前位置: 首页 > Web前端 > JavaScript

Javascript学习数据结构(二叉树、图)

时间:2023-03-27 18:38:42 JavaScript

二叉树与二叉搜索树树是一种非线性数据结构,以分层方式存储数据。树用于存储具有层次关系的数据,例如文件系统中的文件;树也用于存储有序列表。二叉树是一种特殊的树,其子节点不超过两个。二叉树具有一些特殊的计算属性,使得对它们的某些操作非常有效。沿着一组特定的边,您可以从一个节点转到另一个不直接连接到它的节点。从一个节点到另一个节点的这组边称为路径,树可以分为几个级别,根节点为0级,其子级为1级,其子级的子级为2级,依此类推.树中任意一层的节点都可以看作是一棵子树的根,包括根节点的子节点、子节点的子节点等。我们定义为一棵树的层数就是树的深度。每个节点都有一个与之关联的值,有时称为键。从一个节点到另一个节点的距离称为路径。二叉树中每个节点的子节点不允许超过两个。通过将子节点的数量限制为2,可以编写高效的程序来插入、搜索和删除树中的数据。父节点的两个子节点分别称为左节点和右节点。在某些二叉树实现中,左节点包含一组特定的值,右节点包含另一组特定的值。当考虑一种特殊的二叉树时,例如二叉搜索树,确定子节点非常重要。二叉搜索树是一种特殊类型的二叉树,其中相对较小的值存储在左节点,较大的值存储在右节点。此功能使搜索非常高效。下面实现二叉搜索树Node类的定义。每个节点包含三个元素键值data左节点指针leftright节点指针rightclassNode{constructor(data,left,right){this.data=data;this.left=左;this.right=正确;}show(){returnthis.data}}二叉搜索树类初始化根节点root为nullclassBST{root=nullconstructor(){}}insert()方法,用于向树中添加新节点insert(data){letnode=newNode(data,null,null)if(this.root==null){this.root=node}else{current=this.rootletparentwhile(true){parent=currentif(data`for(varj=0;j0){letv=queue.shift()if(v==undefined){console.log(`Visistedvertex:${v}`)}for(letkeyofthis.adj[v]){if(!this.marked[key]){this.edgeTo[key]=vthis.marked[key]=truequeue.push(key)}}}}完整代码classVertex{constructor(label){this.label=label}}classGraph{edges=0adj=[]vertices=0marked=[]edgeTo=[]constructor(v){this.vertices=vfor(让索引=0;index`for(varj=0;j0){letv=queue.shift()if(v==undefined){console.log(`Visistedvertex:${v}`)}for(letkeyofthis.adj[v]){if(!this.marked[key]){this.edgeTo[key]=vthis.marked[key]=truequeue.push(key)}}}}}