// Time: O(n * h) // Space: O(h) /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector binaryTreePaths(TreeNode* root) { vector result; vector path; binaryTreePathsRecu(root, &path, &result); return result; } void binaryTreePathsRecu(TreeNode *node, vector *path, vector *result) { if (!node) { return; } if (!node->left && !node->right) { string ans = ""; for (const auto& n : *path) { ans.append(to_string(n->val).append("->")); } result->emplace_back(move(ans.append(to_string(node->val)))); } if (node->left) { path->emplace_back(node); binaryTreePathsRecu(node->left, path, result); path->pop_back(); } if (node->right) { path->emplace_back(node); binaryTreePathsRecu(node->right, path, result); path->pop_back(); } } };