红黑树的插入

2017-11-21
阅读 6 分钟
2.6k
红黑树的性质 一棵满足以下性质的二叉搜索树是一棵红黑树 每个结点或是黑色或是红色。 根结点是黑色的。 每个叶结点(NIL)是黑色的。 如果一个结点是红色的,则它的两个子结点都是黑色的。 对每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点。 性质1和性质2,不用做过多解释。 性质3,每个...

You-Dont-Know-JS / Types & Grammar 笔记二

2017-11-10
阅读 5 分钟
1.4k
原文 You Don't Know JS: Types & Grammar 测试 {代码...} 122,32,NaN2,NaN 对象包装 String() Number() Boolean() Array() Object() Function() RegExp() Date() Error() Symbol() {代码...} 基础数据类型没有属性和方法,为了使用方法和函数,就需要对应的对象包装它。JS可以自动做到这一点。 {代码...} 注意,用...

You-Dont-Know-JS / Types & Grammar 笔记

2017-11-10
阅读 4 分钟
1.2k
原文 You Don't Know JS: Types & Grammar 类型 null undefined boolean number string object symbol -- added in ES6 值得注意的情形 {代码...} An "undefined" variable is one that has been declared in the accessible scope, but at the moment has no other value in it.An "undeclared" variable is one th...

Functions

2017-11-09
阅读 6 分钟
1.3k
在这篇文章中,我们将讨论一个ESCMAScript对象,函数。我们将讨论不同类型的函数,每个类型是如何影响环境中的变量对象(variables object)以及内部的作用域的。我们将回答以下经常会出现的问题,“下面的函数有什么不同吗?”[译者注:当进入一个函数时,会创建一个对象,里面保存了函数运行需要的各种变量]

Lexical environments: Common Theory

2017-11-08
阅读 9 分钟
2.6k
在这一章,我们将讨论词法环境的细节——一种被很多语言应用管理静态作用域的机制。为了能够更好地理解这个概念,我们也会讨论一些别的——动态作用域(ECMAScript中并没有直接使用)。我们将看到环境是如何管理嵌套的代码结构和闭包。ECMA-262-5规范介绍了词法环境,尽管这是一个和ECMAScript相独立的概念,被应用于很多函数...

Lexical environments: ECMAScript implementation

2017-11-08
阅读 5 分钟
2.2k
在之前的3.1章。我们讨论了词法环境的整体理论。我们还特别讨论了与之相关的静态作用域(static scope)和闭包(closures)。我们还提到ECMAScript所采用的链式环境帧模型(the model of chained environment frames)。在这一章,我们将用ECMAScript去实现词法环境(lexical environments)。我们要关注实现过程中的结构和术语...

javascript中的地址

2017-11-03
阅读 3 分钟
1.6k
在执行func(v1)后,v1的地址address01被作为参数传入,并以变量名obj保存。obj ={name:'v1'}之后,obj保存的是新对象的地址address04。而v1保存的地址address01没有变化。其后执行fund(v1),v1的地址address01被作为参数传入,并以变量名obj保存。obj.name = 'v1',修改地址address01中名为name的值。所以通过v1访问地址...

javascript中拷贝

2017-11-02
阅读 5 分钟
2.3k
变量obj存的是地址address01,执行let obj1 = obj后,变量obj1存的还是address01。就好像主卧室(obj),或大房间(obj1),都指的是房间号为address01的房间。所以,你说“换掉大房间的床”,obj1.c = 'l am an obj1',等同于“换掉主卧室的床”,因为都是“换掉房间号为address01的房间里的床”。

递归小结(一)

2017-10-26
阅读 6 分钟
1.9k
将递归当作一种类似for/while的控制结构,for/while 通过迭代求解问题,递归通过分治求解问题。递归是这样解决问题的。首先,这个问题存在简单情形。所谓简单情形,是指在该情形下问题不可再分割,同时这个情形下的答案显而易见。此外,简单情形还控制了解决问题的边界(具体表现在于函数不再被递归调用)。举例:

斐波那契递归

2017-10-24
阅读 2 分钟
2.1k
可以发现整个过程是二叉树先序遍历的过程。此外,整个过程中多次调用了Fib1(3)、Fib1(2)、Fib1(5),产生大量冗余的调用。无路什么数据结构最后都是队栈吗?

推导二叉树的遍历结果

2017-10-20
阅读 6 分钟
3k
二叉树的后序序列是按照「左子树」,「右子树」,「根」的顺序排列的,序列中最后一个元素代表该二叉树的根节点。二叉树的前序序列是按照「根」,「左子树」,「右子树」的顺序排列的,序列中第一个元素代表该二叉树的根节点。故通过已知的后序序列可以发现根,作为前序序列的第一个元素。二叉树的中序序列是按照「左子...

二叉树的顺序插入

2017-10-19
阅读 3 分钟
2k
模拟过程 插入根节点A 在父节点A的左下方插入子节点B 在父节点A的右下方插入子节点C 在父节点B的左下方插入子节点D 在父节点B的右下方插入子节点E 在父节点C的左下方插入子节点F... 分析过程 每次插入节点需明确被插入的父节点以及被插入的位置(左右) 明确被插入的父节点 第1步中,需将A存储,因为A在第2,3步中被取出...

二叉树的非递归后序遍历

2017-10-19
阅读 2 分钟
2.4k
先遍历节点的左子树,再遍历节点的右子树,最后访问节点。其中一个节点会被使用三次,第一次被用于遍历其左子树,第二次被用于遍历其右子树,第三次被用于访问节点。第一次在到达该节点时被使用,第二次在左子树遍历结束后被使用,第三次在右子树遍历结束后使用。第一次到达该节点可以直接使用该节点,与此同时,需要将...

二叉树的非递归中序遍历

2017-10-19
阅读 4 分钟
3.9k
中序遍历 概念 「中序遍历」指先遍历节点的左子树,再访问节点,最后遍历节点的右子树,按照这种规则不重复地访问树中所有节点的过程。 思路 图中树的结构如下,以变量root保存 {代码...} {代码...} 设计函数,传入的参数为树的根root,从根节点出发,遍历所有节点 {代码...} 先遍历节点的左子树,再访问节点,最后遍历...

二叉树的非递归前序遍历

2017-10-18
阅读 5 分钟
2.1k
前序遍历 「前序遍历」指先访问节点,再遍历节点的左子树,最后遍历节点的右子树,按照这种规则不重复地访问树中所有节点的过程。 模拟过程 过程中,用「打印节点值」表示对节点的访问,「访问结束」表示该节点完成了访问节点,遍历节点的左子树,遍历节点的右子树的所有过程。 到达节点A,访问节点A(打印节点值),开...

二叉树的递归遍历(JS实现)

2017-10-18
阅读 3 分钟
5.2k
相关概念 「树的遍历」 指按照一定规则不重复地访问树中所有节点的过程。「访问」指针对节点的操作,如打印节点的值,更新节点的值等。 本文讨论二叉树的遍历,对节点的访问通过打印节点的值体现出来。从二叉树的根节点出发,遍历可分为三个环节: 访问节点(打印节点的值) 遍历节点的左子树 遍历节点的右子树 不同环节...