node

平衡二叉树

我们两清 提交于 2020-01-21 08:49:23
一步一步写平衡二叉树(AVL树) 转载: http://www.cppblog.com/cxiaojia/archive/2012/08/20/187776.html   平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一个节点使得高度之差大于1,就要进行节点之间的旋转,将二叉树重新维持在一个平衡状态。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。   平衡二叉树实现的大部分过程和二叉查找树是一样的(学平衡二叉树之前一定要会二叉查找树),区别就在于插入和删除之后要写一个旋转算法去维持平衡,维持平衡需要借助一个节点高度的属性。我参考了机械工业出版社的《数据结构与算法分析-C语言描述》写了一个C++版的代码。这本书的AVLTree讲的很好,不过没有很完整的去描述。我会一步一步的讲解如何写平衡二叉树,重点是平衡二叉树的核心部分,也就是旋转算法。 第一步:节点信息

你真的懂npm吗?

淺唱寂寞╮ 提交于 2020-01-21 08:01:18
我们作为一个前端的开发人员,无论你是刚刚入行还是已经入行很久,我们都有必要了解下npm,在这个日益变更的互联网时代,我们已经要快速跟上时代的发展,不然就被社会淘汰,扯远啦!回归正传,之前我写过一篇文章叫 《项目中利用npm生成package.json的那点事儿》 ,我感觉有点太简单啦!适合一些刚刚入门的人来看,现在想具体了了什么是 npm ,它做了什么?干了什么?这样对们了解项目,了解各种依赖,更好的管理项目和发布自己的 npm 模块。所以说,还是有必要的,高级者,勿喷,只是写给初入前端的人或者想了解前端的人,前方有坑,😕,慎入!!! 在说 npm 之前,我有必要简单的提下Nodejs。Nodejs是构建在V8引擎上的ES runtime,nodejs并不是一门语言,nodejs让js在服务器端跑起来的runtime。Nodejs 具有2大特性; 事件驱动 非阻塞I/O模型 一个完整的项目,总有各种依赖 来源: CSDN 作者: 王来彬 链接: https://blog.csdn.net/alnorthword/article/details/103951570

二叉树遍历

天大地大妈咪最大 提交于 2020-01-21 07:54:32
二叉树遍历最简单的就是递归了。因为递归实质上是栈存了一些中间值,所以我们可以使用stack实现迭代版的遍历。 中序遍历 步骤: 首先将root节点作为当前节点。 1.如果当前节点不为空,压入当前节点。将左节点作为当前节点。 2.否则弹出栈顶节点作为当前节点,输出当前节点。 3.如果右节点不为空,右节点作为当前节点。 4.否则将当前节点置为空。 重复1、2、3、4直到栈为空。 void InorderTraversal(TreeNode *root){ if(!root)return; TreeNode *node=root; stack<TreeNode*> mystk; while(node||mystk.size()){ while(node){ mystk.push(node); node=node->left; } node=mystk.top(); mystk.pop(); cout<<node->val<<'\t'; if(node->right){ node=node->right; }else{ node=NULL; } } } 前序遍历 前序遍历和中序遍历差不多,只是输出节点值的时机不同。 步骤: 以root节点作为当前节点 1.如果当前节点不为空,将当前节点压入栈,同时输出当前节点。并将左节点作为当前节点。 2.否则弹出栈顶作为当前节点。 3.如果右节点不为空

OPC UA Specification 基础之二:术语定义

空扰寡人 提交于 2020-01-21 07:04:05
3.2.1 地址空间(AddressSpace)  OPC UA服务器(Server)向客户端(Client)展现的信息集合。 3.2.2聚合(Aggregate)  用于从原始数据中计算引申数据的函数。  原始数据可以使历史数据也可以是实时数据在缓冲区中的值。常见的聚合操作包括一段时间范围的平均值、最大最小值等。 3.2.3 报警(Alarm)  具有需要被注意的状态的事件(Event)类型 3.2.4 属性(Attributes)  节点(Node)的最基础的属性。  OPC UA定义了所有的属性Attributes,客户端(Clients)及服务器(Servers)不能定义属性Attributes。属性Attributes是地址空间(AddressSpace)中唯一被允许具有数据值的元素。 3.2.5 证书(Certificate)  证书是用于描述客户端(Clients)或服务器(Servers)能力的数字签名的数据结构。 3.2.6 客户端(Client)  是一种软件应用程序,可以依据本规格说明中定义的服务(Services)向OPC UA服务器(Servers)发送消息。 3.2.7 条件状况 (Condition)  是一个通用的定义,用于对事件(Events)这个概念做延伸说明。  一个条件状况(Condition)代表了系统或系统的某个组成元素的状况

[LeetCode 解题报告]124. Binary Tree Maximum Path Sum

痴心易碎 提交于 2020-01-21 05:19:12
Given a non-empty binary tree, find the maximum path sum. For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path must contain at least one node and does not need to go through the root. Example 1: Input: [1,2,3] 1 / \ 2 3 Output: 6 Example 2: Input: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7 Output: 42 考察:最大路径和,对于某个节点只能选择其左子树或者右子树; /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {

[LeetCode] 617. Merge Two Binary Trees

旧城冷巷雨未停 提交于 2020-01-21 03:13:24
合并两个二叉树。题意是给两个二叉树,请按照node的位置对应合并两个二叉树。如果两个二叉树在同一个位置都有各自的node,就对两个node的值相加。例子, Example 1: Input: Tree 1 Tree 2 1 2 / \ / \ 3 2 1 3 / \ \ 5 4 7 Output: Merged tree: 3 / \ 4 5 / \ \ 5 4 7 两种解法,BFS和DFS。DFS解法会用到递归, 先序遍历 的思路做。 时间O(n) 空间O(n) 1 /** 2 * @param {TreeNode} t1 3 * @param {TreeNode} t2 4 * @return {TreeNode} 5 */ 6 var mergeTrees = function (t1, t2) { 7 // corner case 8 if (t1 === null && t2 === null) { 9 return null; 10 } 11 if (t1 === null || t2 === null) { 12 return t1 || t2; 13 } 14 15 // normal case 16 var root = new TreeNode(t1.val + t2.val); 17 root.left = mergeTrees(t1.left, t2

[Vue] NodeJS环境搭建(详细教程+解决踩坑),把Vue项目跑起来!

試著忘記壹切 提交于 2020-01-21 02:36:41
一、安装node.js 1.从 node.js官网 下载并安装node.js,安装过程选择默认,直接next就行。(我是个有个性的人,我安装在E盘,新建了一个nodejs文件夹,安装目录:E:\nodejs) 2. 配置一下node,新建两个文件夹node_cache和node_global, node_global:npm全局安装位置 node_cache:npm缓存路径 打开cmd命令行工具,分开执行如下命令: npm config set cache "D:\nodejs\node_cache" npm config set prefix "D:\nodejs\node_global" 查看 npm 配置 npm config list 3. 打开cmd命令行工具,输入node -v和npm -v查看版本,若出现相应的版本号说明安装成功 ,如图 如果提示 npm 不是内部命令。。。。(恭喜你,第一个坑出现了) , 因为默认node会安装在C盘,而且直接会在环境变量里加上C盘的path,所以你需要修改环境变量,(我的电脑右击->属性->高级系统设置->高级->环境变量)(win7,其他系统的童鞋自己找) 你也可以新建系统变量 变量名为NODE_PATH,值为E:\nodejs 在用户变量的Path中用%NODE_PATH%+英文分号追加上去 类似jdk配置 另外新建系统变量:

kubernetes基础概念知多少

耗尽温柔 提交于 2020-01-21 00:26:10
kubernetes(简称k8s)是一种用于在一组主机上运行和协同容器化应用程序的管理平台,皆在提供高可用、高扩展性和可预测性的方式来管理容器应用的生命周期。通过k8s,用户可以定义程序运行方式、部署升级策略、动态伸缩容,使得用户以一种更灵活可靠的方式来管理应用程序。 关于k8s,是一种对应用服务的打包、部署、监控等一整套生命周期的自动化管理平台,目前各大公司已在生产环境部署使用,同时k8s社区比较活跃,在未来一段时间内会越来越流行,可以说是以后服务部署的事实标准,对于Java开发者来说,你可以不直接使用它,但是不能不了解它。 总结来看,k8s特点如下: 自动装箱 :基于容器,结合调度策略将多种应用部署到同一节点上,提高资源利用率; 自我修复 :支持故障转移/重启,具有健康检查机制; 水平扩展 :通过命令手动执行扩容,可基于CPU等资源负载率来动态实现伸缩容; 服务发现/负载均衡 :通过KubeDNS(或CoreDNS)为系统内置了服务发现功能,为每个service配置DNS名称,service通过iptables或ipvs内建了负载均衡机制; 自动部署 :自动发布和回滚,支持灰度、增量发布等; 配置管理 :ConfigMap实现了配置数据与Docker镜像解耦,为开发部署提供了良好的灵活性; 批处理 :除了管理服务型应用之外,Kubernetes还支持批处理作业及CI(持续集成)

上层建筑——DOM元素的特性与属性(dojo/dom-attr)

十年热恋 提交于 2020-01-20 18:31:25
  上一篇返本求源中,我们从DOM基础的角度出发,总结了特性与属性的关系。本文中,我们来看看dojo框架是如何处理特性与属性的。dojo框架中特性的处理位于dojo/dom-attr模块属性的处理为与dojo/dom-prop模块中。 attr.set()   方法的函数签名为: require(["dojo/dom-attr"], function(domAttr){ result = domAttr.set("myNode", "someAttr", "value"); });   “someAttr”代表特性名称,但有时候也可以是一些特殊的属性名,如:‘textContent’:      可以看到上图中使用attr设置innerText只会在html标签中增加innerText这个自定义特性,而无法改变文本,使用textContent却能够达到改变文本的目的。其中缘由就是因为在attr模块建立了forceProps字典,在此字典中的key全部使用prop模块来设置: forcePropNames = { innerHTML: 1, textContent:1, className: 1, htmlFor: has("ie"), value: 1 }   set()方法中主要处理以下几件事: “someAttr”除了可以是字符串外,还可以是key-value对象

node + vue + nginx 项目跨域处理

瘦欲@ 提交于 2020-01-20 16:42:25
同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源,当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域 前端vue跨域处理: proxy : { '/api' : { target : 'http://www.globm.top' , changeOrigin : true , ws : true , pathRewrite : { '^/api' : '' } } } const baseUrlHash = { production : 'http://www.globm.top:6090' , development : '/api' } const BASE_URL = baseUrlHash [ process . env . NODE_ENV ] axios . defaults . baseURL = BASE_URL 后端项目跨域处理或nginx跨域处理:(项目或nginx处理一次跨域即可,否则会造成双重跨域) node跨域 app . all ( '*' , function ( req ,