Description
Given a binary tree, return all root-to-leaf paths.
Example
given the following binary tree:
1
/ \
2 3
\
5
All root-to-leaf paths are:
["1->2->5", "1->3"]
Solution 1(C++)
class Solution {
public:
void travelPath(TreeNode* node, string& str, vector<string>& res){
if(!node) return;
string strn=str;
strn.append(to_string(node->val));
strn = strn + "->";
travelPath(node->right, strn, res);
travelPath(node->left, strn, res);
if(!node->left && !node->right){
strn.pop_back(); strn.pop_back();
res.push_back(strn);
return;
}
}
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> res;
string str= "";
travelPath(root, str, res);
return res;
}
};
Solution 2(C++)
class Solution {
public:
void traverse(TreeNode* root, string path, vector<string>& res) {\
if(path.length() > 0)
path += "->";
path += to_string(root->val);
if(root->left == NULL && root->right == NULL)
{
res.push_back(path);
return;
}
if(root->left != NULL)
traverse(root->left, path, res);
if(root->right != NULL)
traverse(root->right, path, res);
return;
}
vector<string> binaryTreePaths(TreeNode* root) {
if(root == NULL)
return vector<string>();
vector<string> res;
string path;
traverse(root, path, res);
return res;
}
};
算法分析
遍历,注意要找到叶子节点,才能将字符串存贮数组中。
程序分析
注意这里最好使用引用。引用是可以更改值的,否则参数无法传播。可参考:C/C++中函数参数传递详解。