二叉树算法题汇总

二叉树经典算法题详解(灰常详细) 二叉树经典算法题解析 阅读详情

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

更新算法题的一些小思考

提示:以下是本篇文章正文内容,下面案例可供参考

一、适用DFS方法解题

1.判断是不是平衡二叉树

在这里插入图片描述
思路:自顶向下 判断根结点的左右子树是否平衡 再以左右子树为根结点判断其左右子树是否平衡

//求树的深度的函数
const dfs=(root)=>{
    if(!root)return 0
    return 1+Math.max(dfs(root.left),dfs(root.right))
}
//如果是空结点也是平衡的
if(!pRoot)return true
//求出左右子树的深度
let left=dfs(pRoot.left)
let right=dfs(pRoot.right)
//判断左右子树的深度是否满足条件
if (Math.abs(left-right)>1) return false
//要保证左右子树的子树也满足条件
return IsBalanced_Solution(pRoot.left)&&IsBalanced_Solution(pRoot.right)

2.输出二叉树中和为某一值的全部路径(1)

(只能从根结点到叶子节点)
在这里插入图片描述
思路:自顶向下 递归直到叶子结点 将路径保存至path[],判断是否满足目标值,有则加入res[],随着递归的回溯更新path[]

var res=[]
var path=[]
//从根节点递归到叶子结点
const dfs=(root,target)=>{
 if(!root)return
  path.push(root.val)
  //如果该结点是叶子结点 且等于目标值 加入结果集
 if(root.left===null&&root.right===null&&root.val===target){
//  深浅拷贝需注意
      res.push(path.slice())
	}
// 如果不是叶子结点 继续往下
 if(root.left||root.right){
     dfs(root.left,target-root.val)
     dfs(root.right,target-root.val)
  }
  //注意更新path数组
  path.pop()
}
	//调用函数
    dfs(root,expectNumber)
    return res

3.输出二叉树中和为某一值的全部路径(2)

(不限制从根结点到叶子 但一定是从上到小的)

function FindPath( root ,  sum ) {
    // write code here
    var res=0
    
    const dfs=(root,target)=>{
       if(!root)return
        if(root.val===target){
            res+=1
            
        }
        dfs(root.left,target-root.val)
        dfs(root.right,target-root.val) 
            

    }
    const fn=(root,target)=>{
        if(!root)return
       dfs(root,target)
        fn(root.left,target)
        fn(root.right,target)
      
    }
    fn(root,sum)
    return res
}

二、适用BFS(借助队列)

1. 从上往下打印二叉树(不分行)

思路:借助队列 当前结点的左右孩子依次加入队列 根据队列先进先出的特点 后续再弹出队头元素作为下一次循环的结点 直至队列为空

if(!root)return[]
let quene=[]
let res=[]
quene.push(root)
while(quene.length!==0){
//注意shift()是从队头删除
const node=quene.shift()
res.push(node.val)
if(node.left)quene.push(node.left)
if(node.right)quene.push(node.right)
}
return res

2. 从上往下打印二叉树(分行)

思路:基于1题的思想,每次循环向队列中添加的就是同一层的元素,因此只循环当前队列的长度即是打印一层的元素。

var res=[]
var quene=[]

if (!root)return []
quene.push(root)
while(quene.length!==0){
	//得到当前队列的长度 既该层的元素有多少个
	const n=quene.length
	//声明一个临时数组存放当前层的元素
	var temp=[]
	for(let i=0;i<n;i++){
	const node=quene.shift()
	temp.push(node.val)
	if(node.left)quene.push(node.left)
	if(node.right)quene.push(node.right)
	}
	res.push(temp.slice())
从仿真到实战:PMOS缓启动与栅极泄放电路的优化设计 本文深入探讨了PMOS缓启动与栅极泄放电路的优化设计,通过立创EDA仿真和实物调试,解决了关断速度慢和耐压问题。文章详细介绍了电路改进方案和低功耗优化技巧,为工程师提供了实用的工程实践建议,帮助提升电源开关电路的性能和可靠性。 阅读详情

相关推荐

懒人精灵手游内存技术分析

教学声明:全套教程教学用到的游戏采用手游私服网游进行测试,不针对任何游戏。教学只做计算机技术研究,不做其他用途。

yizhihaoren123的博客 1660

二叉树经典算法题目

思路:套用层序遍历的模板,然后记录当前层的最后一个node,和下一层的最后一个node.(如果知道当前层的最后一个node是哪一个,在把node的左右节点发放入队列的时候,下一层的最后一个node就能得出)。和上一题的不同的一点是,还要知道当前层的第一个节点是谁。1.遇到左子节点为空,右子节点不为空的情况,不满足 2.遇到第一个左子节点不为空,右子节点为空或者在右子节点都为空的时候,下面的节点子节点均为叶。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。

qq_42575907的博客 2054

支付宝周期扣款实战:从签约到主动扣款的完整Java代码与避坑指南

本文详细介绍了支付宝周期扣款功能的完整Java实现流程,从协议签约到主动扣款的各个环节,包括业务模型设计、签约接口实现、异步通知处理、主动扣款技术等关键步骤。针对开发中常见的陷阱和问题,提供了实用的避坑指南和代码示例,帮助开发者高效实现连续支付功能,提升用户留存率。

weixin_27199085的博客 376

二叉树算法题

后,我们了解了二叉树的相关概念和性质,并且实现了顺序结构二叉树——堆和链式结构二叉树,那么在本篇中我们就来试着解决一些二叉树相关的算法题,相信通过这些练习之后你会对二叉树有更深的理解。在之前二叉树的相关章节(

mljy.博客 2740

Jetson Nano 【1】入手开箱、烧系统

类似于半开箱哈哈 怀着小期待的心情,屁颠屁颠跑到村口领快递,拿到了这个香喷喷的Jetson Nano 开发板 开箱: 由于太激动了忘记拍点啥,于是在最后留了张全家福 板子的结构: 我觉得这个有必要记录一下,于是去官方文档拿了张图来:官方文档传送 1=SD card 的卡槽,位于第二层板子的背部,也就是大风扇屁股位置 2=40针扩展接头(还没开用) 3=USB的供电口,根据大佬测试(某哩...

椰子奶糖的博客 4198

Qt (高仿Visio)流程图组件开发(一) 效果展示及基本开发框架构思

最近因为工作原因需要使用Qt开发一个类似于Visio的流程图组件,需满足基本的流程图功能,图元类型可自定义扩展,不同图元存有各类自定义数据,可以保存为xml文件,可以读取xml文件生成流程图等等。

qq_43793182的博客 1万+

二叉树的经典例题—数据结构

二叉树

m0_61963422的博客 4885

AVM环视算法实战:从3D碗型投影到多场景模式切换的实现与优化

本文深入探讨了AVM环视算法在3D碗型投影和多场景模式切换中的实现与优化。通过分析3D碗型投影的核心原理和动态视角调节技术,展示了如何实现从超广角模式到转向模式的无缝切换。文章还分享了性能优化实战经验,包括实时性提升和图像拼接质量优化,为开发者提供了宝贵的AVM系统开发指南。

weixin_42573113的博客 171

LeetCode | 二叉树高频面试算法题汇总【速来】

🔥持续更新二叉树高频面试算法题,带你搞懂递归结构🔥

做技术人 · 产优质博客 · 找好工作 1784

通信原理 | 通俗理解 | 因子图、消息传递以及它们之间的关系

在算法迭代过程中,通过反复更新这些消息,直到收敛,最终可以得到每个变量的边缘概率分布或最有可能的整体状态。算法通过因子图中的节点反复交换消息,直到找到最优解或所有消息稳定下来,从而解决了比如聚会日期这样的优化问题。在实际应用中,这种方法可以用来解决更复杂的问题,比如图像识别、语音识别和机器学习中的其他问题。,特别是在处理概率模型和执行概率推断时,因子图提供了一个强大的工具。(比如朋友的空闲时间和地点的可用性),并且你希望尽可能让所有人满意。在真正的因子图和消息传递算法中,这个过程被数学化和形式化。

若北辰 1205

基于高频变压器的隔离式推挽栅极驱动电路

摘要:本文介绍了一种基于高频变压器的隔离式推挽栅极驱动电路,通过变压器实现电气隔离,为功率MOS管提供可靠驱动信号。电路包含输入侧PWM信号处理、变压器磁耦合隔离传输以及副边驱动逻辑等关键部分,利用电阻电容网络控制开关速度并防止误触发。该隔离驱动方案广泛应用于高压开关电源、新能源汽车电机控制器、光伏逆变器和工业变频器等需要高电压隔离及抗干扰能力的电力电子设备中,有效保障系统安全性和可靠性。

qq_37999850的博客 490

【算法】图解面试笔试热点二叉树相关算法题汇总

假设有一棵Node类型的节点组成的二叉树,树中每个节点的parent指针都正确地指向自己的父节点,头节点的parent指向null。只给一个在二叉树中的某个节点node,请实现返回node的后继节点的函数。在中序遍历中,节点的下一个节点叫做后继节点,节点的前一个节点叫做前驱节点

2302_78914800的博客 1196

基于STM32、HAL库的RN8209D电能计量芯片驱动程序设计

/ 假设电压互感器变比为220V:0.5V,电流互感器变比为20A:5mA。// 电压ADC原始值。// 电流ADC原始值。// 有功功率(W)// 电能(kWh)

corlin6688的博客 472

二叉树基础算法题总结(第二十七天)

的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。是指从根节点到最远叶子节点的最长路径上的节点数。**说明:**叶子节点是指没有子节点的节点。的某个节点和这个节点的所有后代节点。,返回所有从根节点到叶子节点的路径。,翻转这棵二叉树,并返回其根节点。,求出该树的节点个数。是指没有子节点的节点。

shiboluobuding的博客 411

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

BAT等大厂所封杀的Android面试秘籍汇总

staticfinal异常处理内部类匿名内部类多态抽象和接口集合框架HashMap结构图HashMap 的工作原理HashMap 与 HashTable 对比ConcurrentHashMapBase 1.7Base 1.8ArrayListLinkedListCopyOnWriteArrayList反射单例饿汉式双重检查模式静态内部类模式线程状态状态控制volatilesynchronized根据获取的锁分类原理Lock锁的分类悲观锁、乐观锁自旋锁、适应性自旋锁死锁引用类型。

2501_90243353的博客 944

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

算法题汇总

算法汇总 环形链表 https://leetcode.cn/problems/linked-list-cycle/ 反转链表 https://leetcode.cn/problems/reverse-linked-list/28 环形链表 II https://leetcode.cn/problems/linked-list-cycle-ii/ 快乐数 https://leetcode.cn/problems/happy-number/ 反转链表 II https:/

yolo 1413

Android程序员如何在内卷和倒挂中明哲保身,或是百尺竿头更进一步?

final异常处理内部类多态抽象和接口集合框架反射单例线程volatileLock引用类型动态代理元注解image。

omofun5541的博客 1014

Leetcode高频算法题:数组篇(一)

leetcode高频算法题:数组篇。部分题解是本人的原创解法

qq_22270363的博客 302

字节跳动最爱考的 64 道算法题(JS版)

缘起现在大厂面试中,算法题几乎为必考项,且近几年频现 LeetCode 真题,此篇为拿到字节、腾讯、京东 Offer 的笔者本人在准备面试过程中亲自刷过以及遇到过高频算法题。文章内容会分模...

LuckyWinty的博客 2579

秋招面试中遇到的算法题及答案

更多精彩请关注微信公众号“爱折腾的码农”,如果大家感兴趣的,可以多多分享和关注微信公众号(你的关注是我写下去的动力),二维码见下图。 本篇内容主要分享自己在秋招过程中遇到的一些算法题和总结的典型代码。比如说数据结构中的冒泡、归并、快排等排序方法,二叉树遍历、前缀树、哈希表、LRU、股票买卖、C++读取输入方法等内容,里面不仅有题目,还有我个人认为比较好的答案附录在上面,如果感兴趣的话可以公众号后台回复“算法题”。最后,预告接下来几篇文章会主要写C++中的STL,欢迎大家关注。 ...

weixin_43305362的博客 313

uiautomation遍历所有窗口_剑指offer最优解集合:剑指offer 所有算法题的最优解集合!!...

每个校招 && 社招找工作的小伙伴都会需要这篇文章,67道剑指offer算法题的最优解全集,所有的答案都是最适合面试手撕算法的最优解!!!方便的话,帮忙分享给身边需要的同学~剑指offer算法题001:二维数组中的查找剑指offer算法题002:替换空格剑指offer算法题003:从尾到头打印链表剑指offer算法题004:重建二叉树表剑指offer算法题005:用两个...

weixin_39958559的博客 116

【导航】算法题

【导航】算法题

小心星的博客 1291

前端算法题

前端算法题总结

qq_56470781的博客 227

剑指Offer Java版 66题刷题笔记汇总

备战校招研发岗,无论笔试还是面试算法都占很大比重的,加油! 写在前面 此文章为刷题笔记的汇总篇,包含《剑指Offer》66道算法题的个人解题思路及Java代码。 代码同步发布在GitHub:https://github.com/JohnnyJYWu/offer-Java 所有题目均可在牛客网在线编程平台进行调试。 网址:https://www.nowcoder.com/ta/coding...

机盐的博客 3736
上一篇: MyBatisPlus自定义查询
下一篇: vue2响应式原理的理解
Orange_usst_code
博客等级 码龄7年 18粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值