算法:二叉树的所有路径

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

一、背景介绍

二、解题步骤

总结


提示:以下是本篇文章正文内容,下面案例可供参考

一、背景介绍

给定一个二叉树,返回所有从根节点到叶子节点的路径。

输入:

   1
 /   \
2     3
 \
  5
输出: ["1->2->5", "1->3"]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3

二、解题步骤

解题思路:

我们可以逆向推理,如果该二叉树有N个叶子节点,是不是意味着要做N次路径拼接添加操作。

单次的路径拼接操作,由叶子节点的值和父节点的路径组成,父节点的路径又由它的父节点的路径组成。也就是说我们从根节点出发,分别朝左子树和右子树遍历,只要当前节点不是叶子节点,那么就将当前节点的信息放入父节点的路径,直到遇到叶子节点,然后完成最后的组装。

这个题很适合用递归的思路解答。

代码示例:

@Test
public void test(TreeNode root) {
    List<String> answer = new ArrayList<>();
    searchBT(root, "", answer);
    System.out.println(JSON.toJSONString(answer));
}

private void searchBT(TreeNode root, String path, List<String> answer) {
    if (root.left == null && root.right == null) {
        answer.add(path + root.val);
    }
    if (root.left != null) {
        searchBT(root.left, path + root.val + "->", answer);
    }
    if (root.right != null) {
        searchBT(root.right, path + root.val + "->", answer);
    }
}

path + root.val + "->"   父节点路径拼接

path + root.val    叶子节点全路径组装

这是两个关键点。


总结

每天进步一点点!

相关推荐

  1. 算法所有路径

    2024-05-02 04:50:02       30 阅读
  2. 257.所有路径

    2024-05-02 04:50:02       51 阅读
  3. day17 所有路径

    2024-05-02 04:50:02       53 阅读
  4. leetcode257.所有路径

    2024-05-02 04:50:02       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-02 04:50:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-02 04:50:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-02 04:50:02       82 阅读
  4. Python语言-面向对象

    2024-05-02 04:50:02       91 阅读

热门阅读

  1. NLP(11)--词向量

    2024-05-02 04:50:02       32 阅读
  2. LeetCode 刷题 -- Day 8

    2024-05-02 04:50:02       31 阅读
  3. 【C语言】指针

    2024-05-02 04:50:02       27 阅读
  4. 民航电子数据库:mysql与caedb(select语法差异)

    2024-05-02 04:50:02       38 阅读
  5. 多线程常见使用

    2024-05-02 04:50:02       30 阅读
  6. leetcode第5题:最长回文子串

    2024-05-02 04:50:02       25 阅读
  7. 制作Android分区镜像

    2024-05-02 04:50:02       30 阅读