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.
一道和深搜、树有关的题
注意to_string的用法,比较棘手的地方是字符串必须最后压进ans里:
/**
* 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> ans;
if(!root)return ans;
dfs(ans,root,to_string(root->val));
return ans;
}
void dfs(vector<string>& ans,TreeNode* root,string str){
if(!root->left&&!root->right){
ans.push_back(str);
}
if(root->left)dfs(ans,root->left,str+"->"+to_string(root->left->val));
if(root->right)dfs(ans,root->right,str+"->"+to_string(root->right->val));
}
};
用广度优先也可以,需要两个队列:
/**
* 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) {
queue<TreeNode*> q;
queue<string> str_q;
vector<string> ans;
if(!root)return ans;
q.push(root);//enqueue
str_q.push("");//enqueue
while(!q.empty()){
TreeNode* helper=q.front();
string tmp=str_q.front();
q.pop();//dequeue
str_q.pop();//dequeue
if((!helper->left)&&(!helper->right))
ans.push_back(tmp+to_string(helper->val));
if(helper->left){
q.push(helper->left);
str_q.push(tmp+to_string(helper->val)+"->");
}
if(helper->right){
q.push(helper->right);
str_q.push(tmp+to_string(helper->val)+"->");
}
}
return ans;
}
};
广度优先的话这样会更清晰:
/**
* 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) {
queue<TreeNode*> q;
queue<string> str_q;
vector<string> ans;
if(!root)return ans;
q.push(root);//enqueue
str_q.push(to_string(root->val));//enqueue
while(!q.empty()){
TreeNode* helper=q.front();
string tmp=str_q.front();
q.pop();//dequeue
str_q.pop();//dequeue
if((!helper->left)&&(!helper->right))
ans.push_back(tmp);
if(helper->left){
q.push(helper->left);
str_q.push(tmp+"->"+to_string(helper->left->val));
}
if(helper->right){
q.push(helper->right);
str_q.push(tmp+"->"+to_string(helper->right->val));
}
}
return ans;
}
};