前端算法经典题目

206 阅读2分钟

二叉树

树:树是一种数据结构,它是由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;
}