解法1:DFS
这题的思路是使用前序遍历,然后记住string参数这里只能值传递,不能引用传递,只有使用值传递才能保证每个调用栈才能使用不同的string副本!
cpp
class Solution {
public:
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> v;
string s;
dfs(root,v,s);
return v;
}
void dfs(TreeNode* node,vector<string>& v,string s){
if(node){
s.append(to_string(node->val));
if(!node->left&&!node->right){
v.push_back(s);
}else{
s.append("->");
dfs(node->left,v,s);
dfs(node->right,v,s);
}
}
}
};
解法2:BFS
手写一算就懂了!
cpp
class Solution {
public:
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> v;
queue<TreeNode*> node_q;
queue<string> path_q;
bfs(v,root,node_q,path_q);
return v;
}
void bfs(vector<string>& v,TreeNode* root,queue<TreeNode*>& node_q,queue<string>& path_q){
node_q.push(root);
path_q.push(to_string(root->val));
while(!node_q.empty()){
TreeNode* node=node_q.front();
string path = path_q.front();
node_q.pop();
path_q.pop();
if(!node->left&&!node->right){
v.push_back(path);
}else{
if(node->left){
node_q.push(node->left);
path_q.push(path+"->"+to_string(node->left->val));
}
if(node->right){
node_q.push(node->right);
path_q.push(path+"->"+to_string(node->right->val));
}
}
}
}
};