# 257. Binary Tree Paths（打印二叉树所有路径）

Given a binary tree, return all root-to-leaf paths.

For example, given the following binary tree:

1
/   \
2     3
\
5
All root-to-leaf paths are:

["1->2->5", "1->3"]

/**
* 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<string> binaryTreePaths(TreeNode* root) {
vector<string> res;
if(root == NULL)
return res;
string str = std::to_string(root->val);
if(root->left != NULL || root->right != NULL){
dfs(root->left, res, str);
dfs(root->right, res, str);
}
else
res.push_back(str);
return res;
}
void dfs(TreeNode* root, vector<string>& res, string str){
if(root == NULL) return;
str += "->" + std::to_string(root->val);
if(root->left == NULL && root->right == NULL){
res.push_back(str);
return ;
}
dfs(root->left, res, str);
dfs(root->right, res, str);
}
};

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
def binaryTreePaths(self, root):
if not root:
return []
res = []
self.dfs(root, res, "")
return res;

def dfs(self, root, res, ls):
if not root.left and not root.right:
res.append(ls+str(root.val));
return res
if root.left:
self.dfs(root.left, res, ls+str(root.val)+"->")
if root.right:
self.dfs(root.right, res, ls+str(root.val)+"->")

class Solution(object):
def binaryTreePaths(self, root):
res = []
if not root:
return res
self.dfs(root, res)
return res;

def dfs(self, root, res):
if not root:
return []
stack = [(root, "")]
while stack:
node, ls = stack.pop()
if not node.left and not node.right:
res.append(ls+str(node.val))
if node.right:
stack.append((node.right, ls+str(node.val)+"->"))
if node.left:
stack.append((node.left, ls+str(node.val)+"->"))
return res

class Solution(object):
def binaryTreePaths(self, root):
res = []
if not root:
return res
self.bfs(root, res)
return res;

def bfs(self, root, res):
if not root:
return []
queue = collections.deque([(root, "")])
while queue:
node, ls = queue.popleft()
if not node.left and not node.right:
res.append(ls+str(node.val))
if node.left:
queue.append((node.left, ls+str(node.val)+"->"))
if node.right:
queue.append((node.right, ls+str(node.val)+"->"))
return res