给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
代码如下:
class Solution {
public:void traversal(TreeNode* cur, vector<int>& path, vector<string> &result){path.push_back(cur->val);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();}}vector<string> binaryTreePaths(TreeNode* root) {vector<string> result;vector<int>path;if(root == NULL) return result;traversal(root, path,result);return result;}
};
注意:
1、在递归函数传参是,用了vertor来记录路径,在之后做回溯pop的时候方便。
2、在写终止条件时,不判断是否为空节点,在找到叶子节点时就开始终止处理,这里使用vector 结构path来记录路径,所以要把vector 结构的path转为string格式,再把这个string 放进 result里。
3、在单层递归逻辑里,用到了回溯的思路,递归完,要做回溯,因为path 不能一直加入节点,它还要删节点,然后才能加入新的节点。