Java实现打印二叉树所有路径的方法

 更新时间:2018年02月11日 12:10:29   作者:sam_justin  
这篇文章主要介绍了Java实现打印二叉树所有路径的方法,涉及java二叉树遍历与运算相关操作技巧,需要的朋友可以参考下

本文实例讲述了Java实现打印二叉树所有路径的方法。分享给大家供大家参考,具体如下:

问题:

给一个二叉树,把所有的路径都打印出来。

比如,对于下面这个二叉树,它所有的路径为:

8 -> 3 -> 1
8 -> 2 -> 6 -> 4
8 -> 3 -> 6 -> 7
8 -> 10 -> 14 -> 13

思路:

从根节点开始,把自己的值放在一个数组里,然后把这个数组传给它的子节点,子节点同样把自己的值放在这个数组里,又传给自己的子节点,直到这个节点是叶节点,然后把这个数组打印出来。所以,我们这里要用到递归。

代码:

/**
Given a binary tree, prints out all of its root-to-leaf
paths, one per line. Uses a recursive helper to do the work.
*/
public void printPaths(Node root, int n) {
  String[] path = new String[n];
  printPaths(root, path, 0);
}
/**
Recursive printPaths helper -- given a node, and an array containing
the path from the root node up to but not including this node,
prints out all the root-leaf paths.
*/
private void printPaths(Node node, String[] path, int pathLen) {
  if (node == null) return;
  // append this node to the path array
    path[pathLen++] = node.value;
  // it's a leaf, so print the path that led to here
  if (node.leftChild == null && node.rightChild == null) {
    printArray(path, pathLen);
  }
  else {
    // otherwise try both subtrees
    printPaths(node.leftChild, path, pathLen);
    printPaths(node.rightChild, path, pathLen);
  }
}
/**
Utility that prints strings from an array on one line.
*/
private void printArray(String[] ints, int len) {
  for (int i = 0; i < len; i++) {
    System.out.print(ints[i] + " ");
  }
  System.out.println();
}

备注:这里只能用一个数组+一个数值才能打印出所需要的路径,如果用linkedlist之类的链表结构是不行的。值得分析一下原因,很有意思。

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • Spring boot基于ScheduledFuture实现定时任务

    Spring boot基于ScheduledFuture实现定时任务

    这篇文章主要介绍了Spring boot基于ScheduledFuture实现定时任务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Java 常见异常(Runtime Exception )详细介绍并总结

    Java 常见异常(Runtime Exception )详细介绍并总结

    这篇文章主要介绍了Java 常见异常(Runtime Exception )详细介绍并相关资料,大家在开发Java 应用软件的时候经常会遇到各种异常这里帮大家整理了一部分,并解释如何解决,需要的朋友可以参考下
    2016-10-10
  • Java设计模式中的外观模式详解

    Java设计模式中的外观模式详解

    这篇文章主要介绍了Java设计模式中的外观模式详解,外观模式也叫“过程模式,外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
    2022-07-07
  • FastJSON的0day漏洞的解决

    FastJSON的0day漏洞的解决

    本文主要介绍了FastJSON的0day漏洞的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • springAOP完整实现过程

    springAOP完整实现过程

    当你调用SimpleService类的doSomething方法时,上述的PerformanceAspect会自动拦截此调用,并且记录该方法的执行时间,这样你就完成了一个针对Spring的AOP入门级案例,感兴趣的朋友一起看看吧
    2024-02-02
  • SpringBoot使用AOP,内部方法失效的解决方案

    SpringBoot使用AOP,内部方法失效的解决方案

    这篇文章主要介绍了SpringBoot使用AOP,内部方法失效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Mybatis核心配置文件、默认类型别名、Mybatis获取参数值的两种方式(实例代码)

    Mybatis核心配置文件、默认类型别名、Mybatis获取参数值的两种方式(实例代码)

    这篇文章主要介绍了Mybatis核心配置文件、默认类型别名、Mybatis获取参数值的两种方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-03-03
  • Java简单计时的实现案例(可以用来限时循环)

    Java简单计时的实现案例(可以用来限时循环)

    这篇文章主要介绍了Java简单计时的实现案例(可以用来限时循环),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 关于SpringBoot单元测试(cobertura生成覆盖率报告)

    关于SpringBoot单元测试(cobertura生成覆盖率报告)

    这篇文章主要介绍了关于SpringBoot单元测试(cobertura生成覆盖率报告),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java的关键字与保留字小结

    Java的关键字与保留字小结

    Java 保留字列表 (依字母排序 共14组) : Java保留字是指现有Java版本尚未使用 但以后版本可能会作为关键字使用
    2012-10-10

最新评论