二叉树
树:树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。
树具有的特点有:
(1)每个结点有零个或多个子结点
(2)没有父节点的结点称为根节点
(3)每一个非根结点有且只有一个父节点
(4)除了根结点外,每个子结点可以分为多个不相交的子树。
二叉树:一棵二叉树是节点的一个有限集合,该集合或者为空,或者由一个根节点加上两棵左子树和右子树组成。
二叉树的性质:
1:二叉树第i层上的结点数目最多为2i-1(i>=1)
2:深度为k的二叉树至多有2k-1个结点(k>=1)
3:包含n个结点的二叉树的高度至少为(log2n)+1
4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1
满二叉树:在一棵二叉树中,所有分支节点都存在左子树和右子树,并且所有的叶节点都在同一层上
完全二叉树:如果一棵具有N个节点的二叉树的结构与满二叉树的前N个节点的结构相同
链表
数组扁平滑处理
let arr = [[1, 2, 2],[3, 4, 5, 5],[6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
/*方案1:使用 Array.prototype.flat 处理*/
arr = arr.flat(Infinity);
/*方案2:把数组直接变为字符串即可*/
arr = arr.toString().split(',').map(item => {
return Number(item);
});
/*方案3:JSON.stringify*/
arr = JSON.stringify(arr).replace(/(\[|\])/g, '')
.split(',').map(item => Number(item));
/*方案4:基于数组的some方法进行判断检测*/
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
所有和为N的连续正数序列
/*
* 输入一个正数N,输出所有和为N的连续正数序列
* 例如:输入15
* 结果:[[1,2,3,4,5],[4,5,6],[7,8]]
*/
function createArr(n,len){
let arr=new Array(len).fill(null),
temp=[];
arr[0]=n;
arr=arr.map((item,index)=>{
if(item===null){
item=temp[index-1]+1;
}
temp.push(item);
return item;
});
return arr;
}