javaScript常见手写算法题(前端笔记三)

本文介绍了编程中进行进制转换的方法,包括从十进制转32进制和32进制转十进制的JavaScript实现。此外,还探讨了两种二叉树遍历策略——深度优先遍历(DFS)和广度优先遍历(BFS)的算法实现。

1. 进制转换---十进制转32进制

ps:将10进制转化成32进制如下代码所示,同时可以举一反三,如十进制转成16进制,把下列函数中的32改成16即可,只要转成比十大的进制,都可以按下列方法取实现。

//10进制转32进制
function decto32(num){
    let res = [];
    let yu;
    let shang = num;
    while(shang >= 32){
        yu = Shang % 32
        shang = Math.floor(shang / 32)
        yu = yu > 9 ? String.fromCharCode(yu + 87) : yu
        res.unshift(yu)
    }
    shang = shang > 9 ? String.fromCharCode(shang + 87) : shang
    res.unshift(shang)
    return res.join('')
}

let result = decto32(549)
console.log(result)    //h5

2. 进制转换---32进制转十进制

ps:下列代码是将32进制转成10进制。也同样可以举一反三,如16进制转成十进制,把下列代码中的32改成16即可,其他比十进制大的进制转成十进制,都可以按下列方法取实现

//32进制转10进制
function to10 (num) {
    let sum = 0;
    let reg = /^(\d)$/;
    num = num.toString().split('')
    for(let i = 0; i < num.length; i++){
        if(!reg.test(num[i])){
            num[i] = num[i].toLowerCase().charCodeAt() - 87
        }
        num[i] += num[i] * Math.pow(32,num.length - 1 - i)
    } 
    return res
}
let num = 'h5'
console.log(to10(num))    //549

3. 判断相同二叉树

function isSameTree(p,q){
    if(p === null && q === null){
        return true
    }
    if(p === null || q === null){
        return false
    }
    if(p.val !== q.val){
        return false
    }
    //分别比对左子树和右子树
    return isSameTree(p.left, q.left) && isSameTree(p.right, q.right)
}

4. 二叉树的深度优先遍历

function dfs (root) {
    if(!root) {
        return
    }
    
    dfs(root.left)
    dfs(root.right)
}

dfs(tree)

5. 二叉树的广度优先遍历

function bfs (root) {
    let res = []
    let quene = [root]
    if(root === null){
        return res
    }
    
    while(quene.length !== 0){
        let level = []
        let len = quene.length
        for(let i = 1;i < len; i++){
            let node = quene.shift()
            level.push(node.val)
            if(node.left) quene.push(node.left)
            if(node.right) quene.push(node.right)
        }
        res.push(level)
    }
    return res
}

bfs(tree)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值