寻找二叉树最远的叶子结点(实例讲解)

 更新时间:2017年12月09日 09:22:43   作者:evasean  
下面小编就为大家分享一篇寻找二叉树最远的叶子结点的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

面试的时候碰到一个题:如何找到一个二叉树最远的叶子结点,以及这个叶子结点到根节点的距离?

第一反应肯定是递归

如何能找到最远的叶子结点,同时也能记下这个叶子节点到根节点的距离呢?采用一个List保持从根节点到叶子节点的路径就可以了,这个list的长度-1就是叶子结点到根节点的距离,list的最后一个结点就是到叶子结点

二叉树我就不用设计了,具体代码参见我的另一篇文章

/**
   * 寻找最远的叶子节点
   */
  public void findFarestLeaf() {
    List<Node> path = new ArrayList<Node>();
    List<Node> longestPath = findLongestPath(root, path);
    Node leaf = longestPath.get(longestPath.size() - 1);
    System.out.println("最远的叶子节点是<" + leaf.key + ", " + leaf.value + ">,到根节点的距离是:"+(longestPath.size() - 1));
  }

  public List<Node> findLongestPath(Node x, List<Node> path) {
    if (x == null)
      return path;
    // 每次递归必须新建list,要不然会导致递归分支都在同一个list上面做,实际是把所有结点都加入这个list了
    List<Node> currPath = new ArrayList<Node>();
    currPath.addAll(path);
    currPath.add(x);
    List<Node> leftPath = findLongestPath(x.left, currPath);
    List<Node> rightPath = findLongestPath(x.right, currPath);
    if (leftPath.size() > rightPath.size())
      return leftPath;
    else
      return rightPath;
  }

以上这篇寻找二叉树最远的叶子结点(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java实战之药品管理系统的实现

    Java实战之药品管理系统的实现

    这篇文章主要介绍了利用Java实现的药品管理系统,本项目属于前后端分离的项目,分为两个角色药品管理员和取药处人员,感兴趣的小伙伴可以学习一下
    2022-04-04
  • 详解java中import的作用

    详解java中import的作用

    这篇文章主要介绍了java中import作用,import与package机制相关,这里先从package入手,再讲述import以及static import的作用。
    2021-04-04
  • spring无法读取properties文件数据问题详解

    spring无法读取properties文件数据问题详解

    这篇文章主要介绍了spring无法读取properties文件数据问题详解,需要的朋友可以参考下
    2020-02-02
  • springboot配置mysql数据库spring.datasource.url报错的解决

    springboot配置mysql数据库spring.datasource.url报错的解决

    这篇文章主要介绍了springboot配置mysql数据库spring.datasource.url报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • spring bean.xml文件p标签使用报错的解决

    spring bean.xml文件p标签使用报错的解决

    这篇文章主要介绍了spring bean.xml文件p标签使用报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 使用SpringBoot开发Restful服务实现增删改查功能

    使用SpringBoot开发Restful服务实现增删改查功能

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。这篇文章主要介绍了基于SpringBoot开发一个Restful服务,实现增删改查功能,需要的朋友可以参考下
    2018-01-01
  • knife4j 整合 springboot的过程详解

    knife4j 整合 springboot的过程详解

    这篇文章主要介绍了knife4j整合springboot的过程,本次整合springboot版本为2.3.12,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Java自动释放锁的三种实现方案

    Java自动释放锁的三种实现方案

    在笔者面试过程时,经常会被问到各种各样的锁,如乐观锁、读写锁等等,非常繁多,下面这篇文章主要给大家介绍了关于Java自动释放锁的三种实现方案,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • 解决新版 Idea 中 SpringBoot 热部署不生效的问题

    解决新版 Idea 中 SpringBoot 热部署不生效的问题

    这篇文章主要介绍了解决新版 Idea 中 SpringBoot 热部署不生效的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Java 多态中继承的转型详解与用法分析

    Java 多态中继承的转型详解与用法分析

    继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为
    2021-10-10

最新评论