class Solution {
public:
string str;
vector<string>vec;
vector<string> binaryTreePaths(TreeNode* root) {
traversal(root);
return vec;
}
void traversal(TreeNode* root){
if(root==nullptr)
return;
str+=to_string(root->val)+"->";
string tmp(str);
if(root->left==nullptr&&root->right==nullptr){
str=str.substr(0,str.size()-2);
vec.push_back(str);
}
traversal(root->left);
str=tmp;
traversal(root->right);
}
};
为何在访问右节点后,不把str重置为tmp呢?观察递归结构,每次结束访问左节点并进入右节点前,都会重置str为tmp。我们想象一下每一个叶子节点调用栈,以left->right->right的形式,只要有调用过left路径,就能保证str被正确重置,唯一例外是right->right...节点,但是这样的节点一定是遍历的最后一个节点,此时也就自然不用重置str了