重构二叉树
## 重构二叉树 >输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 >例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路: * 1. * 2. * 3. * 4. 代码: ```js ```
二叉树的中序遍历
一.中序遍历 1 / \ 2 3 / \ \ 4 5 6 主要思路:用stack记录节点顺序,cur找到左子树的叶子节点,访问后出栈用cur指向父节点,接着访问右节点 方法一:非递归实现 let inorderTraversal = function(root){ const result = [] const stack = [] let current = root while(current || stack.length){ while(curr...
二叉树的前序遍历
一.树的前序遍历 方法一:非递归实现 1 / \ 2 3 / \ \ 4 5 6 主要思路:用一个指针cur,从根节点开始进行访问,先遍历左节点; 用一个stack栈堆记录访问过的节点,访问到叶子节点时,退栈,并且访问右节点 let preorderTraversal = function(root){ const result = [] const stack = []; let cur = root; while(cur || stack.length){ ...
二叉树的后序遍历
一.后序遍历 1 / \ 2 3 / \ \ 4 5 6 方法一:非递归实现 主要思路: 取跟节点为目标节点,开始遍历 1.左孩子入栈 -> 直至左孩子为空的节点 2.栈顶节点的右节点为空或右节点被访问过 -> 节点出栈并访问他,将节点标记为已访问 3.栈顶节点的右节点不为空且未被访问,以右孩子为目标节点,再依次执行1、2、3 let postorderTraversal = function(root){ const stack = [] const result = ...
Javascript教程第十一章:JSON数据--编程的通用语言
Javascript教程第十一章:JSON数据--编程的通用语言 当你想和多个国家人交流的时候,你不可能学习多门语言,你只需要学习一门通用语言即可,当前来说的话就是英语 而在编程世界里,JSON就是英语,JSON就是我们通用的数据格式 一. JSON数据 1.JSON数据解决什么问题 当你想和多个国家人交流的时候,你不可能学习多门语言,你只需要学习一门通用语言即可,当前来说的话就是英语 而在编程世界里,JSON就是英语,JSON就是我们通用的数据格式 1.方法: //转换为J...
Javascript教程第五章:带你走进Symbol的世界
Javascript教程第五章:带你走进Symbol的世界 一.Symbol 1.Symbol使用场景介绍 Symbol:符号,为数据添加特征,方便辨认 2.声明定义Symbol的几种方式 let num1 = Symbol() let num2 = Symbol() console.log(num1 == num2); //返回false,不同内存地址 使用Symbol.for(description)创建的时候会先在内存中寻找,有则指向同一个内存地址,没有则...
Javascript教程第六章:Set 和 WeakSet类型
Javascript教程第六章:Set 和 WeakSet类型 一.Set 和 WeakSet类型 1.Set类型 1.增加: set.add() 2.删除: set.delete() set.clear() 3.改: 4.查: set.has() 5.遍历 set.size() set.values() set.keys() for of 和 forEach(value,key,set) ...
Javascript教程第七章:Map类型
Javascript 教程第七章:Map 类型 传统的对象只能使用字符串作为键名,新增的 Map 可以用所有基本数据类型作为键名. 一.Map 类型 1.Map 类型特点以及创建方式 传统的对象只能使用字符串作为键名 新增的 Map 可以用所有基本数据类型作为键名 1.增 map.set("name","Tsy") let map = new Map(["name1","Tsy"],["name2","Tly"]) 2.删 map.delete() map.clear() 3.改 `...
Javascript教程第八章:函数
Javascript教程第八章:函数 一.函数 1.函数声明的多种方式 2.全局函数定义特点 在全局定义的函数,默认会压入window中,但如果跟window中的默认方法重名,那么会造成默认函数被覆盖,显然这样是不合适的 3.立即执行函数与块作用域解决冲突 问题:引用多个外来插件的时候,出现了函数同名的冲突 解决方案: (1)老办法:写一个立即执行函数,将函数全部放在函数作用域中 (2)新办法:模块化 4.用递归实现求和 function sum(....
Javascript教程第九章:闭包与作用域
Javascript教程第九章:闭包与作用域 一.闭包与作用域 1.延伸函数环境生命周期 在作用域中,只要有一个东西被调用,那么其他的与其共存 function hd(){ let n = 1; return function show(){ console.log(++n); } } hd()(); //返回2 hd()(); //返回2 观察上面的例子,在hd被调用了俩次后,n并没有...