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”]
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
方法一:
利用strstream;
strstream类同时可以支持C风格的串流的输入输出操作
string s1;
stringstream ss;
ss << root->val;
ss >> s1;//不可直接写成ss>>s,因为在进行循环或者递归时先前赋值给s的值会被覆盖掉;
s += s1;
return s;
/**
* 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:
void TreePaths(TreeNode* root, string s, vector<string> &all){
if(!root)
return;
string s1;
stringstream ss;
ss << root->val;
ss >> s1;
s += s1;
if(root->left)
TreePaths(root->left, s + "->", all);
if(root->right)
TreePaths(root->right, s + "->", all);
if(!root->left && !root->right)
all.push_back(s);
}
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> all;
string s;
TreePaths(root, s, all);
return all;
}
};
方法二:
s += to_string(root->val);
to_string()函数返回字符串形式,
参考 to_string()
/**
* 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:
void TreePaths(TreeNode* root, string s, vector<string> &all){
if(!root)
return;
s += to_string(root->val);
if(root->left)
TreePaths(root->left, s + "->", all);
if(root->right)
TreePaths(root->right, s + "->", all);
if(!root->left && !root->right)
all.push_back(s);
}
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> all;
string s;
TreePaths(root, s, all);
return all;
}
};