力扣题目链接
class Solution {
private:void traversal(TreeNode* cur, vector<int>& path, vector<string>& result) {path.push_back(cur->val); // 中,中为什么写在这里,因为最后一个节点也要加入到path中 // 这才到了叶子节点if (cur->left == NULL && cur->right == NULL) {string sPath;for (int i = 0; i < path.size() - 1; i++) {sPath += to_string(path[i]);sPath += "->";}sPath += to_string(path[path.size() - 1]);result.push_back(sPath);return;}if (cur->left) { // 左 traversal(cur->left, path, result);path.pop_back(); // 回溯}if (cur->right) { // 右traversal(cur->right, path, result);path.pop_back(); // 回溯}}public:vector<string> binaryTreePaths(TreeNode* root) {vector<string> result;vector<int> path;if (root == NULL) return result;traversal(root, path, result);return result;}
};
这真的很熟悉,是不是DFS?
最近一直在搞清楚DFS,可现在还是理解思路,可是代码部分还是独立完成不了呜呜呜
我只能记下来了
这题很多人关注回溯这一步,DFS里面也有回溯这个关键一步。
为什么要回溯? 我不回溯往哪里走呢?关键还有一步就要标记已经走过的结点,到最后无路可走,全部遍历完成,结束程序。
理解思路,写不出代码,一刷随想录,差不多都是跟着写,尽量独立写出,大部分记住,理解思路。