思路
题目要我们求从根节点到叶子节点的路径,所以需要前序遍历,这样会很方便的让父节点指向孩子节点,从而找到对应的路径。
本题中会用到回溯,因为要把路径记录下来,然后回溯一个路径到另一个路径。
递归法
1、确定递归函数的参数和返回值
要传入根节点,记录每一条路径的path,存放结果集的result,返回值无
void traversal(TreeNode* cur,vector<int>& path,vector<string>& result)
2、确定递归的终止条件
本题中要找到叶子节点(当cur不为空,其左右孩子都为空),才开始结束的处理逻辑(把路径放到result里)
if(cur->left==nullptr && cur->right==nullptr)
{
string sPath;
for(int ii=0;i<path.size()-1;ii++){
//将path里记录的路径转为string格式
sPath+=to_string(path[ii]);
spath+="->";
}
//循环中之所以不处理容器最后一个元素,是因为最后一个元素不需要->
sPath+=to_string(path[path.size()-1]);//记录最后一个(叶子)结点
result.push_back(sPath);//向result容器里收集一个路径
return;
}
1、之所以没有判断cur为空,是因为下面的逻辑可以控制空节点不入循环。
2、这里使用了vector记录遍历过的路径,在递归终止时,需要把vector结构的path转为string格式,再把这个string