赞
踩
这题的思路是使用前序遍历,然后记住string参数这里只能值传递,不能引用传递,只有使用值传递才能保证每个调用栈才能使用不同的string副本!
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); } } } };
手写一算就懂了!
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)); } } } } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。