257. 二叉树的所有路径

93 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情

一、题目描述:

257. 二叉树的所有路径 - 力扣(LeetCode)   给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。

  示例 1:

image.png

输入:root = [1,2,3,null,5]
输出:["1->2->5","1->3"]

示例 2:

输入:root = [1]
输出:["1"]

提示:

  • 树中节点的数目在范围 [1, 100] 内
  • -100 <= Node.val <= 100

二、思路分析:

每走过一个节点,带着之前走过的路径(str),判断这个节点是不是叶子节点,如果是叶子节点代表走到终点了,一条路出来了,所以放到结果集list中。 不是叶子节点的话,记录当前节点的值,分别处理左子树和右子树,至少有一个不为空,遇到一个为空的,不做任何处理(肯定不能加到list中,因为遇到叶子节点才算一条路)。

三、AC 代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> list = new ArrayList();
        if (root == null) {
            return list;
        }
        String str = root.val + "";
       
        if (root.left == null && root.right == null) {
            list.add(str);
            return list;
        }
        getStr(root.left, str, list);
        getStr(root.right, str, list);
        return list;
    }

    public void getStr(TreeNode root, String str, List<String> list) {
        
        if (root == null) {
            return;
        }
        
        if (root.left == null && root.right == null) {
            str = str + "->" + root.val;
            list.add(str);
        } else {
            str = str + "->" + root.val;
            getStr(root.left, str, list);
            getStr(root.right, str, list);
        }
    }

}

四、总结:

又到了二叉树,还是老结论,递归或者迭代法。

**范文参考:

二叉树的所有路径 - 二叉树的所有路径 - 力扣(LeetCode) (leetcode-cn.com)

【二叉树的所有路径】【C语言详解】【超级详细】【动图展示】 - 二叉树的所有路径 - 力扣(LeetCode)