这是悦乐书的第199次更新,第206篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第62题(顺位题号是257)。给定二叉树,返回所有根到叶路径。例如:

输入:

1

/ \

2 3

\

5

输出:[“1-> 2-> 5”,“1-> 3”]

说明:所有根到叶路径是:1-> 2-> 5, 1-> 3

注意:叶子是没有子节点的节点。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

特殊情况:当根节点为null的时候,直接返回空数组。

正常情况:深度遍历,从根节点开始,依次从左节点开始,一直往左节点遍历进去,直到遇到叶子节点,此时就构成一条完整的路径,而其相邻的右叶子结点,以及从根节点开始的右节点,这些都是一条完整的路径。

public List binaryTreePaths(TreeNode root) {

List list = new ArrayList();

if (root == null) {

return list;

}

helperFun(root, list, "");

return list;

}

public void helperFun(TreeNode root, List list, String path) {

if (root.left != null) {

helperFun(root.left, list, path + root.val + "->");

}

if (root.right != null) {

helperFun(root.right, list, path + root.val + "->");

}

if (root.left == null && root.right == null) {

list.add(path + root.val);

}

}

03 第二种解法

此解法也是利用递归,递归虽然写在方法内部了,但是思路和上面第一种解法的递归是一样的。

public List binaryTreePaths2(TreeNode root) {

List list = new ArrayList();

if (root == null) {

return list;

}

if (root.left == null && root.right == null) {

list.add(root.val+"");

return list;

}

for (String path : binaryTreePaths(root.left)) {

list.add(root.val+"->"+path);

}

for (String path : binaryTreePaths(root.right)) {

list.add(root.val+"->"+path);

}

return list;

}

04 第三种解法

使用迭代的方法,借助两个栈,一个存储节点信息,一个存储路径信息。

public List binaryTreePaths3(TreeNode root) {

List list = new ArrayList();

Stack sNode = new Stack();

Stack sStr = new Stack();

if (root == null){

return list;

}

sNode.push(root);

sStr.push("");

while (!sNode.isEmpty()) {

TreeNode curNode = sNode.pop();

String curStr = sStr.pop();

if (curNode.left == null && curNode.right == null) {

list.add(curStr + curNode.val);

}

if (curNode.left != null) {

sNode.push(curNode.left);

sStr.push(curStr + curNode.val + "->");

}

if (curNode.right != null) {

sNode.push(curNode.right);

sStr.push(curStr + curNode.val + "->");

}

}

return list;

}

05 小结

算法专题目前已连续日更超过一个月,算法题文章62+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

java binarytreenode_LeetCode算法题-Binary Tree Paths(Java实现-3种解法)相关推荐

  1. leetcode算法题--Binary Tree Paths

    原题链接:https://leetcode.com/problems/binary-tree-paths/ vector<string> res; vector<string> ...

  2. LeetCode刷题记录14——257. Binary Tree Paths(easy)

    LeetCode刷题记录14--257. Binary Tree Paths(easy) 目录 前言 题目 语言 思路 源码 后记 前言 数据结构感觉理论简单,实践起来很困难. 题目 给定一个二叉树, ...

  3. java经典100例算法题_10道java经典算法题,每一题都能帮你提升java水平!

    JAVA经典算法题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析:兔子 ...

  4. Java基础算法题(01):判断101-200之间有多少个素数,并输出所有素数。 素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数。也就是素数只有两个因子。

    查看所有50道基础算法题请看: Java的50道基础算法题 import java.util.ArrayList; import java.util.List; public class Detect ...

  5. Re: 一著名软件公司的java笔试算法题!

    主 题: Re: 一著名软件公司的java笔试算法题! 作 者:   szlhj () 等 级:   信 誉 值:   95 所属论坛:   Java J2SE / 基础类 问题点数:   20 回复 ...

  6. Java基础算法题(02):古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    查看所有50道基础算法题请看: Java的50道基础算法题 递归的方法 package Demo02Rabbits; import java.util.Scanner; public class Ra ...

  7. Java基础算法题(07):输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

    查看所有50道基础算法题请看: Java的50道基础算法题 package Demo07Character_Count; import java.util.Scanner; public class ...

  8. Java基础算法题(18):两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三

    查看所有50道基础算法题请看: Java的50道基础算法题 两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已抽签决定比赛名单.有人向队员打听比赛的名单.a说他不和x比,c ...

  9. 用Java刷算法题的常用数据结构(C++转Java)

    文章目录 一:前言 1:为何刷题从C++转java 2:如何上手呢? 二:输入 1:常规的输入 2:关于其他输入符在nextLine()之前用吃掉回车符的问题解决 3:常见输入之我们输入一串数到容器中 ...

最新文章

  1. vue 热更新无反应_不吹不黑谈谈 vue 的 SFC 和 template
  2. 修改WampServer的默认端口
  3. 超级终端工具_【招商通信余俊团队】智能网联汽车发展提速,科技巨头跑步入场,有望成为新一代超级终端——招商通信周周谈(2020年第48周)...
  4. JS遮罩效果 (很强)
  5. 200w的数据量能够占多大内存?发生了OOM如何进行JVM调优?
  6. 利用excel和word批量制作标签
  7. Python+vue设计并实现了宾馆酒店客房管理系统django flask
  8. The firefox installs flashplugin for Linux
  9. 韩信点兵问题的神解法
  10. 明解c语言答案第八章,《明解C语言》第1章初识C语言练习题答案(最新整理)
  11. 抖音不搞「盲目」社交
  12. 智能交通组合拳--飞桨实现车辆类别/车牌/车速检测、跨境头跟踪、车流密度检测、逆行检测
  13. socket编程之 accept函数的理解
  14. DBMS error [ORA-20005: Invalid (NULL) Lob locator (points).
  15. 让前端的子弹飞-TypeScript
  16. JVM历险记第三章:遇到了回收大法师
  17. CMake I 获取/设置编译器
  18. 开源库 Gson 怎么读
  19. 【分享】沙驰服饰邵荣荣:一个女IT当家的修炼
  20. 51单片机8*8点阵显示“中国”

热门文章

  1. 《C语言程序设计:问题与求解方法》——3.9节常见编程错误
  2. 视频监控:特征识别真的优于人脸识别吗?
  3. nginx已添加systemctl,但不能开机自启动问题
  4. 安卓之页面跳转与传值和按钮事件
  5. 移动项目开发笔记(.Net下的观察者(Observer)模式)
  6. DNS浅析-Bind软件的使用及搭建一个简单的DNS缓存服务器
  7. linux命令作为子进程标记,Linux基础命令---显示进程ps
  8. php分页不跳转,分页源代码,分页时上一页下一页不显示,但可以跳转
  9. java accept charset_springmvc中post请求中文乱码问题
  10. java 策略模式会员_七:策略模式(不同等级会员打折算法)