文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给定一个 每个结点的值互不相同 的二叉树,和一个目标值 k,找出树中与目标值 k 最近的叶结点。

这里,与叶结点 最近 表示在二叉树中到达该叶节点需要行进的边数与到达其它叶结点相比最少。
而且,当一个结点没有孩子结点时称其为叶结点。

在下面的例子中,输入的树以逐行的平铺形式表示。
实际上的有根树 root 将以TreeNode对象的形式给出。

示例 1:
输入:
root = [1, 3, 2], k = 1
二叉树图示:1/ \3   2输出: 2 (或 3)
解释: 2 和 3 都是距离目标 1 最近的叶节点。示例 2:
输入:
root = [1], k = 1
输出:1
解释: 最近的叶节点是根结点自身。示例 3:
输入:
root = [1,2,3,4,null,null,null,5,null,6], k = 2
二叉树图示:1/ \2   3/4/5/6输出:3
解释: 值为 3(而不是值为 6)的叶节点是距离结点 2 的最近结点。注:
root 表示的二叉树最少有 1 个结点且最多有 1000 个结点。
每个结点都有一个唯一的 node.val ,范围为 [1, 1000]。
给定的二叉树中有某个结点使得 node.val == k。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/closest-leaf-in-a-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • dfs 建立父节点信息,找到 k 节点,加入队列
  • BFS,向子节点和父节点进行BFS搜索,第一个找到的叶子节点为答案
class Solution {unordered_map<TreeNode*,TreeNode*> father;queue<TreeNode*> q;unordered_set<TreeNode*> visited;
public:int findClosestLeaf(TreeNode* root, int k) {father[root] = NULL;dfs(root, k);int size;TreeNode* cur;while(!q.empty()){size = q.size();while(size--){cur = q.front();q.pop();if(!cur->left && !cur->right)return cur->val;if(cur->left && !visited.count(cur->left)){q.push(cur->left);visited.insert(cur->left);}if(cur->right && !visited.count(cur->right)){q.push(cur->right);visited.insert(cur->right);}if(father[cur] && !visited.count(father[cur])){q.push(father[cur]);visited.insert(father[cur]);}}}return -1;}void dfs(TreeNode* root, int k) {if(!root) return;if(root->val == k){q.push(root);visited.insert(root);}if(root->left)father[root->left] = root;if(root->right)father[root->right] = root;dfs(root->left,k);dfs(root->right,k);}
};

28 ms 22.9 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 742. 二叉树最近的叶节点(建立父节点信息+BFS)相关推荐

  1. MFC动态建立二叉树、序列检错以及获取父节点

    根据前序+中序或中序+后序在MFC中实现动态建立二叉树. 文章目录 根据前序+中序或中序+后序在MFC中实现动态建立二叉树. 前言 一.动态建立二叉树 1.题目要求 2.具体实现 1.对话框布局 2. ...

  2. xpath 获取当前节点的父节点,兄弟节点的方法

    2019独角兽企业重金招聘Python工程师标准>>> xpath_input_exp_mark = '//label[contains(text(), "文本内容&quo ...

  3. Oracle树查询(查询所有子节点,父节点等等)_转载

    Oracle树查询(查询所有子节点,父节点等等) 转载 2016年01月14日 10:11:55 Oracle树查询的最重要的就是select...start with... connect by . ...

  4. dom4j添加节点的父节点_HTML DOM节点介绍

    HTML DOM节点介绍,在HTML DOM中,所有事物都是节点.DOM是被视为节点树的HTML. DOM节点 根据W3C的HTML DOM标准,HTML文档中的所有内容都是节点: 整个文档是一个文档 ...

  5. layui如何获取父节点的父节点_layui树形组件(右键、父节点选中子节点全被选中)...

    一:右键菜单: layui里面没有给到右键菜单,所以,我自己把源码改了一下: 找到layui文件夹里modules下的tree.js 用以上代码,替换以下代码 当i.which等于3,是右键事件,等于 ...

  6. JS获取子节点、父节点和兄弟节点的方法实例总结

    本文实例讲述了JS获取子节点.父节点和兄弟节点的方法.分享给大家供大家参考,具体如下: 一.js获取子节点的方式 1. 通过获取dom方式直接获取子节点 其中test的父标签id的值,div为标签的名 ...

  7. XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 查找校验xml文件中相同的节点属性值 java遍历文件夹解析XML

    XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 以及查找xml文件中相同的节点属性值 项目背景:这是本人实习中所碰到的项目,当时感觉很棘手, ...

  8. Java根据子节点查找父节点

    /*** 根据节点查找父节点* @param label* @return*/public static Label getParentLabelObject(Label label,List< ...

  9. html dom节点取父节点,JavaScript DOM父子兄节点操作必看详解

    首先我们知道网页中的所有内容都是节点(标签.属性.文本.注释等) ,之前我们已经说过了一些元素的获取方法 比如element.getElementById(),element.querySelecto ...

最新文章

  1. 华为鸿蒙适配计划,华为鸿蒙适配计划提前曝光,快看看有你的机型吗?
  2. Solr5.3.1通过copyField设置多个field(字段)同时检索
  3. mac版本查看日志命令
  4. Python基础班---第一部分(基础)---Python基础知识---计算机组成原理
  5. Scrum指南这么改,我看要完蛋!
  6. python图像处理应用的前景_传统图像处理还有前景吗?
  7. python和java哪个好学-Python和Java发展前景哪个好?老男孩python高级编程
  8. 由一个bug引发的SQLite缓存一致性探索
  9. 电压比较器之LM393工作原理
  10. 外文论文查重怎么查?
  11. BIP63(隐身地址)
  12. 蓝桥杯嵌入式快速入门
  13. mysql复制表结构并创建新表_mysql ---复制表结构---创建新表
  14. golang实现最简单的麻将胡牌算法(不包括牌型,有需求后续可以更新牌型计算)
  15. 台湾大学林轩田机器学习技法课程学习笔记8 -- Adaptive Boosting
  16. VR看房项目总结(1)
  17. 全新仿DS网首页模板个人自动发卡,自动发货安装教程及其源码下载
  18. stm32 boot 模式
  19. java如何对不齐,java中的测不准原理_java认证
  20. 强引用,软引用,弱引用,虚引用

热门文章

  1. kail中tools的安装和第一个php学习笔记
  2. 多线程的那点儿事(之读写锁)
  3. bsp的分析(其中使用buildroot文件夹建立rootfs)
  4. 原码、反码、补码,以及负数的位操作
  5. Centos7 安装Mysql5.7
  6. linux操作指令及根目录介绍
  7. RNA-Seq分析软件HTSeq的安装
  8. swagger core 和 swagger ui 如何关联【窥探】
  9. 从单片机转到嵌入式Linux的跨度大吗?
  10. 感觉stm32太简单是一种自负吗?