原题:
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"]
解决方法:
采用dfs的递归方法:
- 将当前节点的值加入到字符串后面;
- 如果是叶节点,则可以将当前字符串加入到结果集;
- 如果不是叶节点,分别递归处理左子树和右子树。
代码:
void dfs(vector<string>& res, TreeNode* root, string s){
if (!root)
return;
if (!s.empty())
s += "->";
s += to_string(root->val);
if (!root->left && !root->right)
{
res.push_back(s);
return;
}
dfs(res, root->left, s);
dfs(res, root->right, s);
}
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> res;
if (!root)
return res;
string s;
dfs(res, root, s);
return res;
}