给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
代码如下:
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 不能一直加入节点,它还要删节点,然后才能加入新的节点。