257.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.
Example 1:

| 12
 
 | Input: root = [1,2,3,null,5]Output: ["1->2->5","1->3"]
 
 | 
Example 2:
| 12
 
 | Input: root = [1]Output: ["1"]
 
 | 
深度优先遍历:
时间复杂度:O(n2)
空间复杂度:O(n2)
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 
 | class Solution {public:
 vector<string> ret;
 void next(TreeNode* root, string path) {
 if (root != nullptr) {
 path += to_string(root->val);
 if (root->left != nullptr || root->right != nullptr) {
 path += "->";
 next(root->left, path);
 next(root->right, path);
 }
 else {
 ret.push_back(path);
 }
 }
 }
 vector<string> binaryTreePaths(TreeNode* root) {
 next(root,"");
 return ret;
 }
 };
 
 | 
广度优先遍历:
时间复杂度:O(n2)
空间复杂度:O(n2)
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 
 | class Solution {public:
 vector<string> binaryTreePaths(TreeNode* root) {
 vector<string> paths;
 if (root == nullptr) {
 return paths;
 }
 queue<TreeNode*> node_queue;
 queue<string> path_queue;
 
 node_queue.push(root);
 path_queue.push(to_string(root->val));
 
 while (!node_queue.empty()) {
 TreeNode* node = node_queue.front();
 string path = path_queue.front();
 node_queue.pop();
 path_queue.pop();
 
 if (node->left == nullptr && node->right == nullptr) {
 paths.push_back(path);
 } else {
 if (node->left != nullptr) {
 node_queue.push(node->left);
 path_queue.push(path + "->" + to_string(node->left->val));
 }
 
 if (node->right != nullptr) {
 node_queue.push(node->right);
 path_queue.push(path + "->" + to_string(node->right->val));
 }
 }
 }
 return paths;
 }
 };
 
 |