二叉树总结 —— 前端面试考点

字节跳动前端面试全流程与高频考点解析 前端开发作为现代Web应用的核心技术栈,其知识体系涵盖从基础语言特性到工程化实践的完整链路。理解JavaScript闭包、事件循环等核心原理是构建复杂应用的基础,而React Fiber架构、Hooks机制等框架特性则体现了前端技术的演进方向。在工程化层面,Webpack优化与性能监控体系的搭建能显著提升应用质量,这些技术通过字节跳动等头部企业的面试实践得到验证。本文以字节跳动前端面试流程为样本,详解包括作用域链、微前端架构、虚拟列表优化等高频考点,为开发者提供从基础知识到系统设计的完整备战方案。 阅读详情

二叉树 是树的一种,即树中每个节点最多只能有两个子节点。
二叉树 常见考点有深度优先遍历、广度优先遍历。其中,深度优先遍历又分为前序、中序、后序遍历。

二叉树的存储方式:
1、链式存储:用指针把各个节点串联起来;
2、顺序存储:用数组把树的节点从上往下一层一层存起来(广度优先遍历);
二叉搜索树是二叉树的一种,表现为有值且有序。具体特点为:

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉搜索树。

Code Part

二叉树的先中后序遍历,有递归和迭代(栈+非递归)两种方法。
递归法

二叉树先序遍历 – 递归版

const preOrder = (root) => {
	let res = []
	let dfs = (root) => {
		if(!root) return;
		res.push(root.val) //先序遍历从根节点开始
		dfs(root.left) //递归左子树
		dfs(root.right) //再递归右子树
	}
	dfs(root)
	return res
}

二叉树中序遍历 – 递归版

var inOrder = (root) => {
	let res = []
	let dfs = (root) => {
		if(!root) return;
		dfs(root.left) 
		res.push(root.val)
		dfs(root.right)
	}
	dfs(root)
	return res
}

二叉树后序遍历 – 递归版

var postOrder = (root) => {
	let res = []
	let dfs = (root) => {
		if(!root) return;
		dfs(root.left)
		dfs(root.right)
		res.push(root.val)
	}
	dfs(root)
	return res
}

二叉树先序遍历 – 非递归版

var preOrder = (root) => {
	if(!root) return;
	let stack = [root] //新建栈,并把根节点入栈
	let res = []
	while(stack.length > 0){
		let n = stack.pop() //栈顶元素出栈
		res.push(n.val)
		n.right && stack.push(n.right) //注意!栈是后进先出,所以右节点先入栈	
		n.left && stack.push(n.left) //如果左节点存在,也入栈
	}
	return res
}

二叉树中序遍历 – 非递归版

var inOrder = (root) => {
	if(!root) return;
	let stack = [] 
	let p = root
	let res = []
	while(stack.length || p){
		while(p){
			stack.push(p)
			p = p.left //中序先遍历左子树
		}
		let n = stack.pop()
		res.push(n.val) //得到根节点的值
		p = n.right //再遍历右子树
	}
	return res
}

二叉树后序遍历 – 非递归版

var postOrder = (root) => {
	if(!root) return
	let stack = [root]
	let outputStack = []
	let res = []
	while(stack.length){
		let n = stack.pop()
		outputStack.push(n) //多加一个栈,先按照先序存值,再反转pop出来
		n.left && outputStack.push(n.left)
		n.right && outputStack.push(n.right)
	}
	while(outputStack.length){
		let n = outputStack.pop()
		res.push(n.val)
	}
	return res
}

广度优先遍历 bfs

let res = []
const bfs = (root) => {
    const q = [root] 
    while(q.length > 0){
        const n = q.shift()
        res.push(n.val)
        //二叉树
        // n.left && q.push(n.left)
        // n.right && q.push(n.right)

        //树
        n.children.forEach((child) => {
            q.push(child)
        })
    }
}
bfs(root)

层序遍历,一层一层遍历二叉树得到节点值。

//利用队列
var levelOrder = function(root) {
  let queue = [root]
  let res = []
  if(!root) return res;
  while(queue.length !== 0){
  	//当前层的节点数,单独拿出来,for循环会改变queue结构!!
    let nodeLength = queue.length 
    let curLevel = [] //存放每一层的节点

    for(let i = 0;i < nodeLength;i++){
      let n = queue.shift()//队头出队
      curLevel.push(n.val)
      n.left && queue.push(n.left)
      n.right && queue.push(n.right)
    }
    res.push(curLevel) //把每一层的结果放到数组
  }
  return res
};

总结下面试常考的也是围绕下面几种方式进行:
深度优先遍历进一步拓展,有了下面几种遍历方式
1、先序遍历(递归、非递归+栈)
2、中序遍历(递归、非递归+栈)
3、后序遍历(递归、非递归+栈)

广度优先遍历进一步拓展为
1、层序遍历(队列)

大厂前端面试全攻略:技术体系与实战解析 前端开发作为现代Web应用的核心技术,其知识体系涵盖JavaScript核心原理、浏览器工作机制、框架实现及工程化实践等多个维度。理解事件循环、Virtual DOM diff等底层原理,能帮助开发者优化性能并解决复杂业务场景问题。随着TypeScript和工程化能力成为大厂面试重点,掌握Webpack编译流程、Babel插件开发等技能尤为重要。在项目实践中,通过STAR法则包装经验,并深入技术难点如性能优化方案(如懒加载实现),能显著提升面试竞争力。本文结合2023年大厂面试趋势,解析高频考点如浏览器缓存 阅读详情

相关推荐

【LaTeX PPT模板集】Beamer主题与配色使用教程

【LaTeX PPT模板集】Beamer主题与配色使用教程

Xminyang的博客 1万+

前端面试题——二叉树遍历

二叉树遍历在各种算法和数据结构问题中都有广泛的应用,如二叉搜索树、表达式的树形表示、堆的实现等。同时也是前端面试中的常客,掌握好二叉树遍历算法对于一名合格的前端工程师来说至关重要。

omroji的博客 1218

ArcGIS高效拆分shp文件:无需依赖属性表的实用技巧

本文针对ArcGIS中shp文件因属性表缺失而难以拆分的问题,详细介绍了无需依赖属性表的实用技巧。核心是使用“拆分多部件要素”工具,直接根据图形结构将多个独立但被合并的部件拆分为单个要素,并提供了ArcGIS Pro和ArcMap的操作流程、关键注意事项及拆分后的属性处理方案。

n2o3p4的博客 378

前端leetcde算法面试套路之二叉树

这里优先选择了 LeetCode 热题 HOT 100 中的树题,毕竟刷题的边际收益就是冲击需要算法的面试,所以 Hot 优先级更高。

js2030code的博客 289

Android音频混音器AudioMixer实战:从多路输入到设备播放的完整流程解析

本文深入解析了Android平台上音频混音器AudioMixer的完整工作流程,涵盖从多路音频输入、轨道创建与配置、AudioBufferProvider数据源接入,到核心混音处理与最终设备播放的全过程。文章重点探讨了如何高效管理音频数据流、配置音量与重采样参数,并提供了缓冲区管理与性能优化的实战技巧,帮助开发者构建稳定、低延迟的音频应用。

l3m4n的博客 342

【深度学习】tensorboard中的图片放到论文中

1. 利用tensorboard中的导出数据功能 选中左上角的标签,然后选择csv格式的数据下载即可。 左边的smoothing 数值不影响导出数据的大小。 2.tensorboard 图下标签介绍: 放大 Toggle y-axis log scale:将y轴对数化 Fit domain to data:如果拖动了图片等,再重新回到原始位置 Download Current Chart as SVG 3.用下载下来的csv数据来画图 第一幅图片:训练的平均长度 fig, ax1 = plt.sub

gaocui883的博客 1万+

前端工程师leetcode算法面试必备-简单的二叉树

本难度的题目主要考察二叉树的基本概念和操作。算法作为计算机的基础学科,用 JavaScript 刷,一点也不丢人ε=ε=ε=┏(゜ロ゜;)┛。本系列文章会分别给出一种算法的3种难度的总结篇(简单难度,中等难度以及困难难度)。在简单难度中,会介绍该算法的基本知识与实现,另外两个难度,着重讲解解题的思路。

js2030code的博客 221

AHB2eflash 控制器设计笔记

① SRAM② DRAM③ SSD④ SATA⑤ U 盘⑥ 移动硬盘⑦ 机械磁盘eflash。

weixin_46220498的博客 3078

前端算法面试难点解析:二叉树遍历的四种经典方式

在前端技术面试中,算法能力越来越成为衡量开发者水平的重要标准。而二叉树遍历作为数据结构与算法的基础核心内容,几乎成为了各大互联网公司前端岗位的"标配"考题。据统计,超过80%的一线互联网公司在前端面试中会考察二叉树相关算法,其中遍历算法更是重中之重。 为什么二叉树遍历如此重要?因为它不仅考察了候选人对基本数据结构的理解,还涉及到递归、迭代、栈、队列等多个编程核心概念,能够全面反映开发者的逻辑思维...

gitblog_00307的博客 397

手把手入门YOLO到改进优化教程 | 【P2基础篇】数据标注+环境搭建+模型训练

本节以 YOLO自定义目标检测训练为主线,带你从零开始完成 数据标注 → 环境搭建 → 模型训练 → 结果的流程。使用labelImg制作符合YOLO格式的自定义数据集。在Windows基于 Python + Conda 创建独立虚拟环境,安装 PyTorch + CUDA + ultralytics,配置 PyCharm 运行环境。本节不仅使用自定义数据集进行演示,同时也用公开数据集训练 YOLO,查看训练日志与可视化结果(PR、P/R/F1 曲线等)等。

嵌入式阿齐Archie 2万+

学习STM32的CAN总线通信

在配置时,确保您启用了CAN总线功能。CAN节点是CAN总线上的一个设备,每个节点都有唯一的标识符。在CAN总线中,有两种类型的节点:CAN控制器和CAN外设。步骤2:配置CAN总线 在STM32CubeMX中,选择CAN总线模块并进行必要的配置。在CAN总线中,有两个重要的概念:CAN节点和CAN帧。步骤5:测试CAN总线通信 在成功编译和烧录代码后,您可以使用串口调试助手或其他CAN总线工具来测试CAN总线通信。步骤3:编写CAN总线通信代码 在项目的主代码文件中,我们将编写CAN总线通信的示例代码。

2401_85258012的博客 496

前端二叉树面试题

文章目录二叉树常见题型二叉树的中序遍历前序遍历后序遍历重建二叉树对称的二叉树 二叉树 二叉树是树结构中一种典型的树状结构,每个节点最多只能有两个子节点,一个是左侧子节点,一个是右侧子节点。 二叉树中又有一种比较典型的结构,称为二叉搜索树(BST),它允许左侧节点存储的值比父节点小,右侧存储的值比父节点大(或相等)。 常见题型 二叉树的中序遍历 给定一个二叉树,返回它的中序遍历 //递归实现 var inorderTraversal = function(root, array=[]){ if

simon的博客 2166

基于coze studio开源框架二次定制开发教程

CozeStudio是一站式AIAgent开发工具,支持大模型接入、智能体编排、工作流开发等功能。采用Golang+React技术栈,基于微服务架构设计。项目包含后端API、领域逻辑、前端应用等模块,支持自定义任务流节点开发。开发流程涵盖前后端节点定义、实现逻辑编写等步骤,提供完整的开发规范和参考文档。相比商业版,开源版本在功能上有所精简,但仍保留核心开发能力。

coding change your life 790

前端面试常考基础题目详解

• 增加HTML5新特性,如语义化标签(header, nav, main, footer, article, section),表单验证属性(required, pattern),多媒体标签(video, audio)。参考网页[2][4]。例如,HTML5新特性来自网页[2]和[4],CSS动画参考网页[2][6],ES6+特性来自网页[1][2][6]等。参考网页[2][5][6]。• 核心思路:动态规划,状态转移方程 dp[i] = max(dp[i-1], dp[i-2] + nums[i])。

警警的博客 1016

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

前端内参算法宝典:字节跳动、阿里巴巴前端面试高频算法题解析

在竞争激烈的前端面试中,算法能力往往是区分优秀候选人的关键。《前端内参》作为帮助工程师夯实技术基础的权威指南,收录了众多一线互联网企业的真实面试案例。本文将深入解析字节跳动和阿里巴巴前端面试中的高频算法题,提供系统化的解题思路与优化方案,助你在Hard模式的面试中脱颖而出。 ## 一、字节跳动高频算法题全解析 ### 1.1 多维数组扁平化:从递归到ES10新特性 **题目**:将数组`[[

gitblog_01042的博客 415

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

前端面试必刷20题(JS版)

本文整理了拼多多前端面试最高频的15道LeetCode算法题,涵盖数组/字符串、链表、二叉树、双指针、动态规划等核心考点。题目难度以简单+中等为主,每道题都提供了可直接运行的JS代码实现,包括两数之和(哈希表)、无重复字符的最长子串(滑动窗口)、反转链表(链表操作)、二叉树层序遍历(BFS)、最长回文子串(中心扩散)等经典题型。这些题目完全贴合拼多多前端面试风格,是准备面试的必备刷题清单。

警警的博客 171

前端面试高频考点与实战技巧解析

前端开发作为现代Web应用的核心技术栈,其知识体系涵盖JavaScript基础、框架原理、工程化等多个维度。理解闭包、事件循环等JavaScript核心概念是构建复杂应用的基础,而Flex/Grid布局方案则解决了响应式设计的核心问题。在工程实践层面,Webpack性能优化和代码分割策略直接影响应用加载性能,React Fiber架构等框架原理则决定了应用的运行时效率。这些技术要点不仅是日常开发的必备技能,更是大厂前端面试的高频考点。通过系统梳理知识体系、建立面试题库,开发者可以更高效地准备技术面试,展示真

weixin_29006187的博客 323

前端算法入坑指南:用 JavaScript 一口气搞懂数组、栈、队列、链表和二叉树

用 JavaScript 视角系统梳理数组、栈与队列、链表、二叉树四大基础数据结构。从内存模型到底层机制,从遍历方法选择到递归思想培养,面向面试建立完整知识体系。

2503_93330907的博客 452

8个优秀的CSS实践,赶紧收藏!

前言 昨天有幸去字节面试了,顺便拿到了offer,把还记得的东西写下来,供大家参考一下。 计算机网络篇 HTTP HTTP 报文结构是怎样的? HTTP有哪些请求方法? GET 和 POST 有什么区别? 如何理解 URI? 如何理解 HTTP 状态码? 简要概括一下 HTTP 的特点和缺点? 对 Accept 系列字段了解多少? 对于定长和不定长的数据,HTTP 是怎么传输的? HTTP 如何处理大文件的传输? HTTP 中如何处理表单数据的提交? HTTP1.1 如何解决 HTTP 的队头阻塞问题

m0_57540655的博客 104

题解 | #第十一届“图灵杯“NEUQ-ACM程序设计竞赛#

关键词:面向连接,可靠,有序,准确性。链接:https://ac.nowcoder.com/acm/contest/76681/D链接:https://ac.nowcoder.com/acm/con。确实想了很久,毕竟自己在美团前后实习了七个月左右,确实是有感情的,对工作环境,工作内容都很满意,也能学到东西,工作强度不大,主管和同事人也很好。class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 *

2301_79125431的博客 806

工作一年半前端面试指南:从简历到算法的系统准备

在技术面试中,扎实的JavaScript基础、对框架原理的理解以及清晰的工程化思维是考察重点。通过理解事件循环、闭包、浏览器渲染等核心机制,不仅有助于解决性能优化等实际问题,也为深入掌握Vue或React等框架奠定基础。面试官通常通过手写算法题和项目深挖来评估候选人的编码能力与问题解决能力。对于工作一年半的开发者,如何将日常业务经验转化为面试亮点尤为关键。本文从简历梳理、核心八股、框架原理、算法准备到项目讲述,系统总结了一次真实面试准备的经验,帮助你在这个关键节点从容应对跳槽挑战。

weixin_29018815的博客 313

2025金三银四字节跳动前端面试趋势与核心策略

navigator . sendBeacon()方法使得网页可以异步地将数据发送到服务器,与页面的卸载过程同 时进行,这一点非常重要,因为它允许在不影响用户体验的情况下,安全地结束会话或者发送统计数 据。这方法主要用于追踪和诊断信息,特别是在需要确保数据被成功发送到服务器的场景中——比如记 录用户在网页上的行为数据。基本语法●url:一个字符串,代表您想要发送数据到的服务器地址。● data:可选参数,要发送的数据。

W1391517383的博客 3481

小米前端笔试和面试

小米前端岗位笔试面试全解析 笔试主要考察CSS优先级、浏览器渲染原理、JavaScript异步编程及框架基础(React/Vue),涉及算法题和逻辑题。面试分为3-5轮,技术面重点考察框架原理(Vue双向绑定/React Hooks)、Webpack优化、浏览器机制(事件循环/缓存策略)及手撕代码(如Promise.all实现);HR面侧重软技能与企业文化匹配。备考需掌握高频考点(原型链/虚拟DOM/性能优化)并通过LeetCode强化算法能力,同时包装项目经验突出技术难点解决方案。整体考核注重技术深度与工

警警的博客 2374

前端面试场景题(高频考点全解析)

前端面试高频考点摘要 前端面试重点考察技术深度与工程化思维,核心内容包括: JavaScript:事件循环、闭包、原型链、类型转换 CSS:盒模型、Flex/Grid布局、动画性能优化 框架:React/Vue生命周期、虚拟DOM、状态管理 浏览器:HTTP缓存、安全防护、页面渲染流程 手写代码:防抖/节流、Promise实现、常见算法 工程化:Webpack优化、代码重构、tree-shaking 综合能力:性能调试、Git协作、新技术应用 建议针对各模块核心原理和实际场景进行系统性准备,注重代码实现与优

demotang的博客 1155

华为OD前端面试高频考点全解析

根据网络搜索整理,华为OD(Outsourcing Dispatch)高级前端开发岗位的面试通常涉及技术深度、项目经验及解决问题的能力。

wShjBFMM29的博客 421
上一篇: 算法设计 --- 动态规划详解
下一篇: Leetcode105. 从前序和中序遍历构造二叉树 -- 递归
CelineCoding
博客等级 码龄5年 1粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值