# 257. Binary Tree Paths

### Leetcode

<https://leetcode.com/problems/binary-tree-paths/>

### 題目

Given the `root` of a binary tree, return *all root-to-leaf paths in **any order***.

A **leaf** is a node with no children.

&#x20;

**Example 1:**

![](https://assets.leetcode.com/uploads/2021/03/12/paths-tree.jpg)

```
Input: root = [1,2,3,null,5]
Output: ["1->2->5","1->3"]
```

**Example 2:**

```
Input: root = [1]
Output: ["1"]
```

### 解答 <a href="#ti-jie" id="ti-jie"></a>

* **方法一**

Iteration

```
var binaryTreePaths = function(root) {
    if(root === null) return [];

    const res = [];
    const queue = [{
        val: [],
        node: root
    }];
    while(queue.length) {
        const curr = queue.shift();
        const node = curr.node;
        const val = [...curr.val, node.val];
        if (!node.left && !node.right) res.push(val.join('->'));
        if (node.left) {
            queue.push({
                val,
                node: node.left
            })
        }
        if (node.right) {
            queue.push({
                val,
                node: node.right
            })
        }
    }
    return res;
};
```

Runtime: 90 ms, faster than 51.28% of JavaScript online submissions for Binary Tree Paths.

Memory Usage: 44.6 MB, less than 8.23% of JavaScript online submissions for Binary Tree Paths.

* **方法二**

Recursion

```
var binaryTreePaths = function(root) {
    const res = [];
    const helper = (node, path) => {
        if (!node) return;
        path += node.val.toString();
        if (!node.left && !node.right) res.push(path);
        path += "->"
        helper(node.left, path);
        helper(node.right, path);
    }
    
    helper(root, '');
    return res;
};
```

Runtime: 142 ms, faster than 5.13% of JavaScript online submissions for Binary Tree Paths.

Memory Usage: 43.4 MB, less than 73.18% of JavaScript online submissions for Binary Tree Paths.
