阿里面试题 树的深度优先遍历

关于树的面试题  1.完全二叉树与满二叉树: (1)满二叉树:要么是叶子结点(结点的度为0),要么结点同时具有左右子树(结点的度为2)。 (2)完全二叉树:除了最后一层以外,每层结点都完全填满,在最后一层上如果不是满的,则只缺少右边的若干结点。 (3)完美二叉树:每层结点都完全填满。   2.哈夫曼树 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最 阅读详情

前几天内推阿里的前端,自己本来就是菜鸟,面试官让做一道编程题,20分钟。我看到编程题,树的深度优先遍历,这名字让我想到了图的深度优先遍历,心想完了,完了,图的算法我根本不熟悉啊,于是心态就崩了,最后面试也失败了。

后来自己静下心来看这道题,发现并不难,题目如下:

//请使用 JavaScript 编写一个树的深度优先遍历函数(节点最深的最先访问到,依次类推),满足以下测试用例:

// 假设树的结构如下

const tree = [
  {
    id: 1,
    name: '张三',
    children: [
        {
            id: 2,
            name: '李四',
            children: [
                {
                    id: 5,
                    name: '张五'
                }
            ]
        }
    ]
  },
  {
    id: 6,
    name: '玛丽'
  }
]


// 测试用例:

// 1. 生成一颗新树,将所有节点的id,加1
console.log(treeMap(tree, node => {
    let newNode = { ...node }
    newNode.id = node.id + 1
    return newNode
}))

// 打印的新树,应该与tree的结构一致,只是每个id自增1,老的tree,应该没有任何改动

// 2. 打印每个节点的id
treeMap(tree, node => {
    console.log(node.id)
    return node
});


// 应打印顺序应该是: 5,2,1,6


// 3. 对于非法输入,应直接返回第一个入参
console.log(treeMap(null)) // 输出null
console.log(treeMap(tree, true/*不是函数*/)) //输出tree

我的解答如下

function treeMap(tree, f){
    const newtree = [];
    if (!(f instanceof Function)){
        return tree;
    }
    if (tree instanceof Array){
        for (let item of tree){
            const obj = Object.assign({}, item) //这里要注意克隆一下节点,不然会影响老树的结构
            if (item.hasOwnProperty("children")){
                obj.children = treeMap(item.children,f)
            }
            newtree.push(f(obj))
        }
    }
    return newtree
}
Android-字节跳动算法题:给定ViewGroup打印其内所有的View 本人从事Android开发已经有十余年,算是一名资深的移动开发架构师了吧。根据我的观察发现,对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。所以在此将我十年载,从萌新小白一步步成长为Android移动开发架构师的学习笔记,从Android四大组件到手写实现一个架构设计,我都有一一的对应笔记为你讲解。当然我也为你们整理好了百度、阿里、腾讯、字节跳动等等互联网超级大厂的历年面试真题集锦。 阅读详情

相关推荐

中微8S6990实战:5分钟搞定GPIO配置与按键中断(附避坑指南)

本文以中微8S6990单片机为例,详细讲解了GPIO按键中断的快速配置方法与实战避坑指南。内容涵盖GPIO初始化、中断配置、软件消抖优化及低功耗唤醒等关键步骤,并提供了利用逻辑分析仪进行调试验证的有效方法,帮助开发者快速构建稳定可靠的嵌入式按键交互系统。

weixin_29194817的博客 280

生成树题目总结

最小生成树 星际游击队 ( UVA1279 ) 参见lrj的思路:首先把两个点之间的边的函数化(可用一个带t的向量来表示边的变化),然后计算出每个时间点,即任意两条边的大小变成相同的时刻,可用一个结构体来存储。。 最后,计算最初的最小生成树,把存储的事件都拿出来进行比较,符合条件的话,ans++。 思路貌似很简单,网上也有该题的代码,可是如何推出两点之间的边的函数呢?其实也很简单。。 ...

qq_34921856的博客 756

BK3437蓝牙5.2芯片实战:手把手教你设计超低功耗智能家居遥控器(附原理图)

本文详细介绍了BK3437蓝牙5.2芯片在超低功耗智能家居遥控器设计中的应用。通过分析芯片的核心优势、硬件设计要点和低功耗固件策略,手把手教你实现日均功耗低于5μA的遥控器原型,并附有原理图设计详解和常见问题解决方案。

tgb34567890的博客 619

数据结构与算法面试分享(二十七):遍历(BFS & DFS)

它的思想: 假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。显然,深度优先搜索是一个递归的过程。广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索",简称BFS。

之乎者也·的博客 952

Agilent N5230A矢量网络分析仪在射频器件S参数测试中的关键操作指南

本文详细介绍了Agilent N5230A矢量网络分析仪在射频器件S参数测试中的关键操作流程与技巧。内容涵盖从开机预热、校准(SOLT/ECal)、参数设置(频率、点数、功率、IFBW)到连接测量、数据保存分析的全过程,并分享了夹具去嵌入、时域分析等进阶功能与常见问题避坑指南,旨在帮助工程师获得精准可靠的散射参数测试结果。

kotlin6android的博客 401

doris2.1.8连接报错ERROR 1203 (42000): Reach limit of connections解决办法

摘要:客户Doris数据库报错"ERROR 1203 (42000): Reach limit of connections"的解决过程。发现AI提供的解决方案存在错误:1)查询命令应为SHOW FRONTEND CONFIG而非show variables;2)参数名称应为qe_max_connection而非max_connections。正确解决步骤:1)用admin账户登录查看连接数限制和当前连接数;2)通过SHOW PROPERTY命令检查用户资源限制;3)针对不同情况修改参数

Brent的专栏 1762

头歌数据结构——图

【代码】头歌数据结构——图。

weixin_62440328的博客 8115

STMCubeMX使用TB6612驱动编码轮并进行测速

TB6612电机驱动模块通过IN1和IN2引脚控制电机的旋转方向,并通过PWM信号的占空比调节电机速度。代码示例展示了如何使用GPIO控制电机的正反转,以及如何动态调整PWM占空比实现速度控制。系统设计中,TB6612与编码减速电机连接,STM32CubeMX用于初始化GPIO和PWM输出。编码器接口配置使用TIM3进行测速,TIM4定时器用于速度计算。Keil软件中编写的代码包括编码轮计数值获取、速度计算、电机正反转控制以及小车运动控制等功能。通过OLED显示速度,并实现电机的调试与测试。

wwivn的博客 2262

非递归实现DFS的DFS函数体

非递归实现深度优先遍历的主要问题出在如何回退上 这里使用栈来代替递归实现类似的作用 返回值k是访问过的顶点数起到了类似深度的作用 1.栈初始化 2.起始点入栈 3.循环语句直到栈为空 { 1.取栈顶元素,不出栈(如果出栈,造成信息丢失,那么回退将无法进行) 2.找未被访问的邻接点,如果没有就出栈一个元素(回退),如果有就将 其进栈,并置访问标记为1。记录这条边进tree数组 } int Graph_DepthFirst(Graph*g, int start, Edge* tree) //从sta.

eu_zero的博客 333

人工智能大模型原理与应用实战:AI模型转换为API的步骤和方法

传统的开发模式下,构建复杂的软件系统是非常费时费力的,而通过云计算、微服务等技术手段可以实现快速部署、弹性扩展的能力。在这种背景下,越来越多的公司将重点转移到研发人员的产品思维上,希望能够将自己的AI模型转换为一个可供他人调用的API接口。但是对于许多从事AI领域的研发人员来说,如何将自己的AI模型转换为API是一个比较棘手的问题。在这篇文章中,作者将从AI模型转换为API的过程分为以下几个步骤:AI模型准备阶段——模型选择、数据准备、模型训练。

AI天才研究院 2599

3、利用预训练卷积神经网络进行特征提取

本文介绍了如何使用预训练的卷积神经网络(如VGG16)进行图像特征提取,并将提取的特征存储在HDF5数据集中,以便后续用于机器学习模型的训练。文章详细阐述了特征提取的原理、HDF5数据格式的优势、HDF5DatasetWriter类的实现、特征提取流程的代码实现以及实际应用案例。通过该方法,可以在多种图像数据集上高效构建高精度的分类模型。

z2a3b4c5d的博客 114

96道前端面试题+前端常用算法,看这篇足矣了

中年危机是真实存在的,即便有技术傍身,还是难免对自己的生存能力产生质疑和焦虑,这些年职业发展,一直在寻求消除焦虑的依靠。技术要深入到什么程度?做久了技术总要转型管理?我能做什么,我想做什么?一技之长,就是深耕你的专业技能,你的专业技术。(重点)独立做事,当你的一技之长达到一定深度的时候,需要开始思考如何独立做事。(创业)拥有事业,选择一份使命,带领团队实现它。(创业)一技之长分五个层次栈内技术 - 是指你的前端专业领域技术栈外技术 - 是指栈内技术的上下游,领域外的相关专业知识。

m0_60607971的博客 1332

世界职业院校技能大赛财经赛道项目参考逐字稿五

世界职业院校技能大赛财经赛道项目参考逐字稿五

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 134

2024年安卓最新Android-字节跳动算法题:给定ViewGroup打印其内所有的View,2024年最新字节跳动面试是什么意思

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。欢迎大家一起交流讨论啊~网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

2401_84557402的博客 911

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

面试分享:三年工作经验成功面试字节、阿里 P6 总结

来自群友大佬授权发表,如果感觉大佬写的不错,可以点击阅读全文给大佬点个赞。作者:塔阁,原文链接:https://juejin.cn/post/6956992439097753631前言第一...

全栈修炼 869

STM32F407中文手册

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

面试算法大全-深度优先遍历和广度优先遍历

13.1 深度优先遍历和广度优先遍历算法总结 ​ 广度优先搜索算法(Breadth-First-Search,缩写为 BFS),是一种利用队列实现的搜索算法。简单来说,其搜索过程和 “湖面丢进一块石头激起层层涟漪” 类似。 ​ 深度优先搜索算法(Depth-First-Search,缩写为 DFS),是一种利用递归实现的搜索算法。简单来说,其搜索过程和 “不撞南墙不回头” 类似。 ​ BFS 的重点在于队列,而 DFS 的重点在于递归。这是它们的本质区别。 ​

HuFeiHu 642

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

百度面试题——简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点

问题描述: 简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点 解题思路: 树的遍历按遍历方式分为深度优先和广度优先遍历,并可采用递归和非递归两种遍历方式来进行。 深度优先:深度优先可分为前序遍历,中序遍历,以及后续遍历,其思想大体一致,都是先进行深层次某个节点的遍历,直到为空,然后再往上遍历其兄弟节点。深度优先一般采用递归的方式实现,递归的深度为树的高度。 广度优先:广度优先是

qinghunya的专栏 6800

面试问题之数据结构与算法:简述深度优先遍历和广度优先遍历

深度优先遍历从某个顶点出发,首先访问这个顶点,然后访问该顶点的第一个未被访问的邻结点,以此邻结点为顶点继续访问,同时记录其余未访问的邻接点,当一个顶点的所有邻接点都被访问时,回退一个顶点,将未访问的邻接点作为顶点,重复此步骤,直到所有结点都被访问完为止。 广度优先遍历从某个顶点出发,首先访问这个顶点,然后找出这个结点的所有未被访问的邻接点,访问完后再访问这些结点中第一个邻接点的所有结点...

weixin_30734435的博客 712

JavaScript实现树的深度优先遍历和广度优先遍历

一、来棵树 1、tree.js const tree = { val: 'a', children: [ { val: 'b', children: [ { val: 'd', children: [] }, { v

Yolanda_NuoNuo的专栏 1919

笔试算法题(10):深度优先,广度优先以及层序遍历 & 第一个仅出现一次的字符...

出题:要求实现层序遍历二元搜索树,并对比BFS与DFS的区别 分析:层序遍历也就是由上至下,从左到右的遍历每一层的节点,类似于BFS的策略,使用Queue可以实现,BFS不能用递归实现(由于每一层都需要存储所有节点,所以非常耗用内存)。这段代码主要用于反映BFS与DFS的联系; 解题: 1 class Node { 2 public: 3 int va...

weixin_34344677的博客 2336

数据结构-树与深度优先遍历

 笔者在读书时,选择的专业是计算机科学,但和大家一样,在处理线性的问题时较为熟悉,但当自己在尝试理解树和图这种非线性结构时,就总无法深刻准确的理解,为此,也很苦恼很无奈,但也没有什么好的办法。这次趁着完成了《漫画算法》的阅读,再次总结一下关于书中树的内容,也许是几年的工作经历吧,让自己对于代码的编写和理解有了更多的体会,也了解到这种非线性结构的重要性。漫画算法这本书确实生动简洁,理解起来方便,大家对于数据结构感兴趣的,可以也买这本书读读,挺有意思的。图画的形式确实能增强理解性。 概念理解 树这种结构与链表不

不当初 3140

百度面试(树的深度广度遍历-递归非递归)

二叉树的遍历: D:访问根结点,L:遍历根结点的左子树,R:遍历根结点的右子树。 给定一棵二叉树的前序遍历序列和中序遍历序列可以惟一确定一棵二叉树。 二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。 深度优先遍历二叉树。 1. 中序遍历(LDR)的递归算法: 若二叉树为空,则算法结束;否则: 中序遍历...

wangsy1987的博客 264

高级前端程序员面试问题与答案【精选9道】

1. 写 React/Vue 项目时为什么要在组件中写 key,其作用是什么? key 的作用是为了在 diff 算法执行时更快的找到对应的节点,提高 diff 速度。 vue 和 react 都是采用 diff 算法来对比新旧虚拟节点,从而更新节点。在 vue 的 diff 函数中。可以先了解一下 diff 算法。 在交叉对比的时候,当新节点跟旧节点头尾交叉对比没有结果的时候,会根据新节点的 ...

weixin_34176694的博客 1525

基于LoRA的语音合成口音控制技术解析

语音合成技术通过深度学习实现了高度自然的人声生成,其中口音控制是提升语音自然度和适应性的关键技术。LoRA(Low-Rank Adaptation)作为一种高效的模型微调方法,通过低秩矩阵分解捕获特定任务特征,在语音合成领域展现出显著优势。该技术不仅能实现基础音色与口音特征的灵活组合,还具备参数效率高和实时可控的特点。在跨国客服系统、有声书制作等场景中,基于LoRA的口音控制方案能够动态调整语音输出,满足多方言适配需求。本文重点探讨了如何利用LoRA技术实现细粒度的口音控制,包括系统架构设计、训练技巧和实际

weixin_30897079的博客 323

JavaScript实现DOM树的深度优先遍历和广度优先遍历

// 深度遍历 function interator(node) { console.log(node); if (node.children.length) { for (var i = 0; i < node.children.length; i++) { interator(node.children[i]); ...

大灰狼的小绵羊哥哥的博客 661

js 深度优先遍历与广度优先遍历 dom树

一、前言 在面试中,面试官给了个dom树结构:(记不清了,假设是这样) <div class="d1"> <div class="d2"></div> </div> <div class="d3"> <div class="d4"></div> <div class="d5"> ...

啊BEN999 1870
上一篇: 二分查找、插值查找、斐波那契查找
下一篇: 重建二叉树(JS实现)
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值