给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

    示例 1:
    �输入:root = [1,2,3,null,5]

    1. 1
    2. / \
    3. 2 3
    4. \
    5. 5

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

    示例2:
    输入:root = [1]
    �输出:[“1”]

    �需要返回结果的递归算法框架

    1. public List<String> binaryTreePaths(TreeNode root) {
    2. List<String> result = new ArrayList<>();
    3. binaryTreePaths(root, result);
    4. return result;
    5. }
    6. public List<String> binaryTreePaths(TreeNode node, List<String> result) {
    7. }

    当遍历到某个节点时,此节点需要做什么?
    1.若节点为空,则结束递归,返回结果集
    2.若节点的左子树和右子树都为空,则将之前遍历的结果 path 放入结果集,结束递归,返回结果集
    3.若左子树不为空,则将当前节点的值拼接到 path 中,继续递归
    4.若右子树不为空,则将当前节点的值拼接到 path 中,继续递归

    1. public List<String> binaryTreePaths(TreeNode root) {
    2. List<String> result = new ArrayList<>();
    3. binaryTreePaths(root, "", result);
    4. return result;
    5. }
    6. public List<String> binaryTreePaths(TreeNode node, String path, List<String> result) {
    7. if (node == null) {
    8. return result;
    9. }
    10. // 若节点左子树和右子树都为空
    11. if (node.left == null && node.right == null) {
    12. result.add(path + node.val);
    13. return result;
    14. }
    15. path = path + node.val + "->";
    16. binaryTreePaths(node.left, path, result);
    17. binaryTreePaths(node.right, path, result);
    18. return result;
    19. }

    使用成员变量

    1. List<String> result = new ArrayList<>();
    2. public List<String> binaryTreePaths(TreeNode root) {
    3. binaryTreePaths(root, "");
    4. return result;
    5. }
    6. public void binaryTreePaths(TreeNode node, String path) {
    7. if (node == null) {
    8. return;
    9. }
    10. // 若节点左子树和右子树都为空
    11. if (node.left == null && node.right == null) {
    12. result.add(path + node.val);
    13. return;
    14. }
    15. path = path + node.val + "->";
    16. binaryTreePaths(node.left, path);
    17. binaryTreePaths(node.right, path);
    18. }