2023前端二面手写面试题总结

创建10个标签,点击的时候弹出来对应的序号

var a
for(let i=0;i<10;i++){
 a=document.createElement('a')
 a.innerHTML=i+'<br>'
 a.addEventListener('click',function(e){ console.log(this)//this为当前点击的<a> e.preventDefault()//如果调用这个方法,默认事件行为将不再触发。 //例如,在执行这个方法后,如果点击一个链接(a标签),浏览器不会跳转到新的 URL 去了。我们可以用 event.isDefaultPrevented() 来确定这个方法是否(在那个事件对象上)被调用过了。 alert(i)
 })
 const d=document.querySelector('div')
 d.appendChild(a)//append向一个已存在的元素追加该元素。
} 

判断是否是电话号码

function isPhone(tel) {var regx = /^1[34578]\d{9}$/;return regx.test(tel);
} 

验证是否是邮箱

function isEmail(email) {var regx = /^([a-zA-Z0-9_\-])+@([a-zA-Z0-9_\-])+(\.[a-zA-Z0-9_\-])+$/;return regx.test(email);
} 

二叉树深度遍历

// 二叉树深度遍历

class Node {constructor(element, parent) {this.parent = parent // 父节点 this.element = element // 当前存储内容this.left = null // 左子树this.right = null // 右子树}
}

class BST {constructor(compare) {this.root = null // 树根this.size = 0 // 树中的节点个数this.compare = compare || this.compare}compare(a,b) {return a - b}add(element) {if(this.root === null) {this.root = new Node(element, null)this.size++return}// 获取根节点 用当前添加的进行判断 放左边还是放右边let currentNode = this.root let comparelet parent = null while (currentNode) {compare = this.compare(element, currentNode.element)parent = currentNode // 先将父亲保存起来// currentNode要不停的变化if(compare > 0) {currentNode = currentNode.right} else if(compare < 0) {currentNode = currentNode.left} else {currentNode.element = element // 相等时 先覆盖后续处理}}let newNode = new Node(element, parent)if(compare > 0) {parent.right = newNode} else if(compare < 0) {parent.left = newNode}this.size++}// 前序遍历preorderTraversal(visitor) {const traversal = node=>{if(node === null) return visitor.visit(node.element)traversal(node.left)traversal(node.right)}traversal(this.root)}// 中序遍历inorderTraversal(visitor) {const traversal = node=>{if(node === null) return traversal(node.left)visitor.visit(node.element)traversal(node.right)}traversal(this.root)}// 后序遍历posterorderTraversal(visitor) {const traversal = node=>{if(node === null) return traversal(node.left)traversal(node.right)visitor.visit(node.element)}traversal(this.root)}// 反转二叉树:无论先序、中序、后序、层级都可以反转invertTree() {const traversal = node=>{if(node === null) return let temp = node.left node.left = node.right node.right = temptraversal(node.left)traversal(node.right)}traversal(this.root)return this.root}
} 

先序遍历

二叉树的遍历方式

![图片转存失败,建议将图片保存下来直接上传// 测试
var bst = new BST((a,b)=>a.age-b.age) // 模拟sort方法

bst.add({age: 10})
bst.add({age: 8})
bst.add({age:19})
bst.add({age:6})
bst.add({age: 15})
bst.add({age: 22})
bst.add({age: 20})

// 先序遍历
// console.log(bst.preorderTraversal(),'先序遍历')
// console.log(bst.inorderTraversal(),'中序遍历')
//(http://img-repo.poetries.top/images/20210522214837.png)
// console.lo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值