首页 > 编程语言 >LeetCode第257题:二叉树的所有路径的Java实现

LeetCode第257题:二叉树的所有路径的Java实现

时间:2024-07-16 23:00:37浏览次数:18  
标签:node Java 递归 results 二叉树 path new null 257

摘要

LeetCode第257题要求生成二叉树的所有从根节点到叶子节点的路径。本文将介绍两种Java解决方案:迭代法和递归法。

1. 问题描述

给定一个二叉树的根节点,按照从根到叶的顺序遍历所有路径,并将它们作为列表的列表返回。

2. 示例分析

输入:[1,2,3,null,null,4]' 输出:[[1,2],[1,3]]`

3. 算法设计

3.1 递归法

递归法的核心思想是深度优先搜索(DFS),从根节点开始,递归遍历左右子树,将当前节点值添加到路径中。

3.2 迭代法

迭代法使用栈来模拟递归的调用栈,同样采用深度优先搜索的思想。

4. Java代码实现

4.1 递归法

public class Solution {
    public List<List<Integer>> binaryTreePaths(TreeNode root) {
        List<List<Integer>> results = new ArrayList<>();
        dfs(root, new ArrayList<>(), results);
        return results;
    }

    private void dfs(TreeNode node, List<Integer> path, List<List<Integer>> results) {
        if (node == null) return;
        path.add(node.val);
        if (node.left == null && node.right == null) {
            results.add(new ArrayList<>(path));
        }
        dfs(node.left, new ArrayList<>(path), results);
        dfs(node.right, new ArrayList<>(path), results);
    }
}

4.2 迭代法

public class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> results = new ArrayList<>();
        if (root == null) return results;
        Stack<Pair<TreeNode, String>> stack = new Stack<>();
        stack.push(new Pair<>(root, ""));

        while (!stack.isEmpty()) {
            Pair<TreeNode, String> current = stack.pop();
            TreeNode node = current.key;
            String path = current.value + (current.value.isEmpty() ? "" : "->") + node.val;

            if (node.left == null && node.right == null) {
                results.add(path);
            } else {
                if (node.right != null) {
                    stack.push(new Pair<>(node.right, path));
                }
                if (node.left != null) {
                    stack.push(new Pair<>(node.left, path));
                }
            }
        }
        return results;
    }
}

5. 代码解析

  • 递归法中,dfs是一个递归辅助方法,用于遍历树并收集路径。
  • 迭代法中,使用了一个栈来存储当前节点及其路径,使用Pair类来存储节点和对应的路径字符串。

6. 测试验证

使用LeetCode平台或其他测试工具对提供的代码进行测试,确保算法的正确性。

7. 总结

LeetCode第257题是一个典型的树遍历问题,可以通过递归或迭代的方式解决。递归法更直观,而迭代法则更节省空间。

8. 参考文献


标签:node,Java,递归,results,二叉树,path,new,null,257
From: https://blog.csdn.net/2301_77695569/article/details/140479173

相关文章

  • Java SE 多态
    1.多态的定义多态是Java面向对象的三大特性之一,它允许不同类型的对象对同一方法进行不同的实现。具体来说就是去完成某个行为,不同的对象去完成时会产生出不同的状态。比如,狗和猫都是动物,但完成吃饭这个动作时,会有吃狗粮和吃猫粮这两种状态。publicclassAnimal{p......
  • java的基础
    Java的概述开元、共享、社区庞大的计算机语言java之父詹姆斯·高斯林java技术体系javaSEjavaEEjavaMEjava特性可移植、跨平台、强类型语言、安全java的应用领域网站以及后台手机领域金融项目物流系统桌面开发物联网项目服务器企业级开发大数据科学技术安卓......
  • 代码随想录刷题Day 14 二叉树part02
    226.翻转二叉树//这道题其实就是遍历二叉树,然后交换每个节点的左右子节点即可。这里我就使用了一个栈来存储需要遍历的节点,每次循环弹出一个,然后交换其左右子节点就好了classSolution{publicTreeNodeinvertTree(TreeNoderoot){Stack<TreeNode>stack=new......
  • 【Java--数据结构】二叉树
    欢迎关注个人主页:逸狼创造不易,可以点点赞吗~如有错误,欢迎指出~树结构树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合注意:树形结构中,子树之间不能有交集,否则就不是树形结构常见概念  节点的度:一个节点含有子树的个数,如A的度为6......
  • 7月16日JavaSE学习笔记
    方法(函数、过程)语法返回值类型方法名(参数列表){方法体}返回值类型:该方法必须返回的一个这个类型的对象当方法不需要返回值时,返回值类型就定义为voidpublicstaticintmax(inta,intb){intmax=a>b?a:b;//方法名和变量名不会冲突//return返回......
  • java入门---作用域
    作用域:作用域是指在程序中定义变量的区域,该变量在该区域内可被访问。1、关于作用域的两种查询在JavaScript中编译器会用两种查询方式进行查询一种是LHS查询;一种是RHS查询;俩个查询的含义是,当变量出现赋值操作在左侧时进行LHS查询,出现在右侧时进行RHS查询。详细的讲就是R......
  • 花几千上万学习Java,真没必要!(九)
    while循环:测试代码1:packagetestwhile.com;publicclassTestWhile{publicstaticvoidmain(String[]args){inti=0;while(i<5){System.out.println("当前循环次数:"+i);i++;}}}测试代码2......
  • 利用递归的二叉树的先序,中序,后序遍历
    一.常见的二叉树的遍历①先序遍历:先访问根节点,再访问左右子树(根左右)③中序遍历:先访问左子树,再访问根节点,最后访问右子树(左根右)③后序遍历:先访问左右子树,再访问根节点(左右根)先定义二叉树的数据结构:typedefcharElemType;typedefstructBTNode{ ElemTypedata; ......
  • 快速上手 Caffeine:Java 缓存库初学者指南
    一、背景简介:Caffeine是一个高性能的Java缓存库,旨在为现代应用程序提供快速、高效的缓存解决方案。它由GoogleGuavaCache的创始人之一开发,具备基于时间的过期、基于大小的回收、异步加载、统计信息等多种特性。Caffeine的性能有多么强大呢?以下是官方给出的基准测试......
  • Java SE 总结
    目录1初始Java2数据类型与变量3运算符4程序逻辑控制5方法的使用6数组的定义与使用7 Java类和对象8继承和多态9抽象类和接口10Java中String类11Java异常1初始JavaJDK,JRE,JVMJava代码书写注释标识符关键字标识符:在程序中由用户给类名......