一:题目
二:上码
1:DFS
/*** 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:/**思路:DFS深度优先遍历1.确定递归函数的参数和返回类型(这里我们需要的是路径和装下路径的容器 以及二叉树的根节点)void getAns(TreeNode* root, string path,vector<string>paths);2.递归的终止条件这里我们需要遍历到多个叶节点以确定我们的路径 所以只要该节点不空我们的递归就不终止 直到我们将所有的路径统计完 递归终止 3.确定递归函数的递归体if(root->left == NULL && root->right == NULL) //到达叶节点paths.push_back(path);else{getAns(root->left,path,paths);getAns(root->right,path,paths);} **/void getAns(TreeNode* root, string path,vector<string>&paths) {//引用 &if(root == NULL) return ;path += to_string(root->val);if(root->left == NULL && root->right == NULL) //到达叶节点paths.push_back(path);else{path += "->";getAns(root->left,path,paths);//这里体现的也是回溯,当这个递归函数结后,他就回溯到其右节点上getAns(root->right,path,paths);} }vector<string> binaryTreePaths(TreeNode* root) {vector<string> ans;getAns(root,"",ans);return ans;}
};
2:回溯(其实也是DFS 反正都是到达叶节点就开始回溯)
/*** 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 getAns(TreeNode* root, vector<int>&path,vector<string>&paths) {//引用 &path.push_back(root->val);if(root->left == NULL && root->right == NULL) {//到达叶节点 递归的终止条件string str;for(int i = 0; i < path.size() - 1; i++) {str += to_string(path[i]);str += "->";}str += to_string(path[path.size()-1]);//加上最后一个数paths.push_back(str);return ;}if(root->left) {getAns(root->left,path,paths);path.pop_back();//当上方的递归函数终止的时候,我们需要回溯,去找该节点的右节点 那么我们的路径容器//肯定需要将上条路径的最后一个节点 pop出去 }if(root->right) {getAns(root->right,path,paths);path.pop_back();//当上方的递归函数终止的时候,我们需要回溯,去找该节点的右节点 那么我们的路径容器//肯定需要将上条路径的最后一个节点 pop出去 }}vector<string> binaryTreePaths(TreeNode* root) {if(root == NULL) return {};vector<string> paths;vector<int>path;getAns(root,path,paths);return paths;}
};
加油 素未谋面 陌生 没见过 路人 的你啊!!!!!!!!!!!