Open SunXinFei opened 5 years ago
前序遍历为:
ABDGHECKFIJ
中序遍历为:
GDHBEAKCIJF
后序遍历为:
GHDEBKJIFCA
let result = [];
let dfs = function (node) {
if(node) {
result.push(node.value);
dfs(node.left);
dfs(node.right);
}
}
dfs(tree);
console.log(result);
let result = [];
let dfs = function (node) {
if(node) {
dfs(node.left);
result.push(node.value); // 直到该结点无左子树 将该结点存入结果数组 接下来并开始遍历右子树
dfs(node.right);
}
}
dfs(tree);
console.log(result);
result = [];
function dfs(node) {
if(node) {
dfs(node.left);
dfs(node.right);
result.push(node.value);
}
}
dfs(tree);
console.log(result);
let result = [];
let stack = [tree]; // 先将要遍历的树压入栈
let count = 0; // 用来记录执行到第一层
let bfs = function () {
let node = stack[count];
if(node) {
result.push(node.value);
if(node.left) stack.push(node.left);
if(node.right) stack.push(node.right);
count++;
bfs();
}
}
bfs();
console.log(result);
动画演示https://visualgo.net/zh/sorting 时间复杂度记忆- 冒泡、选择、直接 排序需要两个循环,每次只关注一个元素,平均时间复杂度为O(n2)O(n2)(一遍找元素O(n)O(n),一遍找位置O(n)O(n)) 快速、归并、希尔、堆基于二分思想,log以2为底,平均时间复杂度为O(nlogn)O(nlogn)(一遍找元素O(n)O(n),一遍找位置O(logn)O(logn)) 稳定性记忆-“快希选堆”(快牺牲稳定性) 排序算法的稳定性:排序前后相同元素的相对位置不变,则称排序算法是稳定的;否则排序算法是不稳定的。
var entryObj = {
a: {
b: {
c: {
dd: 'abcdd'
}
},
d: {
xx: 'adxx'
},
e: 'ae'
}
}
// 要求转换成如下对象
var outputObj = {
'a.b.c.dd': 'abcdd',
'a.d.xx': 'adxx',
'a.e': 'ae'
}
function isObject(ob) {
return Object.prototype.toString.call(ob) === '[object Object]';
}
function flat(entryObj) {
let result = {};
fn(entryObj);
return result;
function fn(obj, tmp='') {
for (let key in obj) {
if (isObject(obj[key])) {
fn(obj[key], tmp + key);
} else {
result[tmp + key] = obj[key];
}
}
}
}
console.log(flat(entryObj))
两数求和
解题:
非常简单的暴力破解法,两层循环,一层是循环最外面的nums,内层循环nums只不过角标比外层多一。
这个思路是一层循环,用target减去当前的元素的值,然后从nums数组中找一下有没有这个剩下元素
还是按照第二个思路,第二个思路缺点就是虽然用了lastIndexOf这个方法,但是还是太慢了,毕竟用indexof这种方法还是循环了一次数组。所以我们这里使用上map。我们在循环的时候,边给map添加我们要找到的减去的值,并记录下当前的角标,这样在我们在循环到数组的下个数就在map里面,那么这就是我们要的结果,把map中的角标和下一个元素角标返回即可。