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,因为需要使用到递归,必须要指定递归出口,对于这个情况,递归出口就是叶子节点。
先贴出我自己写的low代码。。。
class Solution {
public:
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> result;
if (root == NULL) return result;
string out = "";
DFS(root, result, out);
return result;
}
void DFS(TreeNode* root, vector<string>& result, string& out) {
if (root->left == NULL && root->right == NULL) {
out += to_string(root->val);
cout << out;
result.push_back(out);
return;
} else {
if (root->left != NULL) {
string oldStr = out;
out += to_string(root->val) + "->";
DFS(root->left, result, out);
out = oldStr;
}
if (root->right != NULL) {
string oldStr = out;
out += to_string(root->val) + "->";
DFS(root->right, result, out);
out = oldStr;
}
}
}
}
这个题发现了一个情况,就是如果在DFS中使用string& out,调用DFS的时候不能传入“”(空字符串),必须定义初始化。
然后在再传Grandyang的代码:
class Solution {
public:
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> result;
if (root == NULL) return result;
string out = "";
DFS(root, result, "");
return result;
}
void DFS(TreeNode* root, vector<string>& result, string out) {
out += to_string(root->val);
if (root->left == NULL && root->right == NULL) {
result.push_back(out);
} else {
if (root->left != NULL) DFS2(root->left, result, out + "->");
if (root->right != NULL) DFS2(root->right, result, out + "->");
}
}
};
简洁的一逼啊。。。。还是要继续努力。。共勉!