/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> res;
if(root == NULL) return res;
dfs(root,res,to_string(root->val));
return res;
}
void dfs(TreeNode* node, vector<string>& res, string s){
if(node->left == NULL && node->right == NULL){
res.push_back(s);
return;
}
if(node->left != NULL){
dfs(node->left,res,s+"->"+to_string(node->left->val));
}
if(node->right != NULL){
dfs(node->right,res,s+"->"+to_string(node->right->val));
}
}
};
dfs的迭代形式还是不太熟练,这里很明显是先序,要多练练,三序遍历的迭代才是最重要的。
这里我们判断当前结点是否是叶子结点,如果是,就将tmp数组中的数字拿出来拼接起来再加上当前叶子结点的值。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
void dfs(TreeNode* root){
if(root == nullptr) return;
if(root->left == nullptr && root->right == nullptr){
string str = "";
for(int i = 0; i < tmp.size(); ++i){
str += to_string(tmp[i])+"->";
}
str +=to_string(root->val);
res.push_back(str);
return;
}
tmp.push_back(root->val);
dfs(root->left);
dfs(root->right);
tmp.pop_back();
}
vector<string> binaryTreePaths(TreeNode* root) {
//dfs即可,不想pop_back就传vector,想的话就全局
if(root == nullptr) return res;
dfs(root);
return res;
}
private:
vector<string> res;
vector<int> tmp;
};