原题链接:257. 二叉树的所有路径
思路:
从根节点到叶子结点,所以需要前序遍历 这样才能让父结点指向子节点,在遍历路径的同时将值进行存储,直到碰到叶子结点为止
这里使用vector 结构path来记录路径,所以要把vector 结构的path转为string格式,再把这个string 放进 result里。
那么为什么使用了vector 结构来记录路径呢? 因为在下面处理单层递归逻辑的时候,要做回溯,使用vector方便来做回溯。
全代码:
class Solution {
public:
void traversal(TreeNode* cur,vector<int>& path, vector<string>& result){
//中,为什么中放在首位?因为叶子结点要加入到path中
path.push_back(cur ->val);
if(cur ->left == NULL && cur ->right == NULL)
{//如果是叶子结点
string sPath;//创建string用于存储路径
for(int i = 0; i < path.size() - 1; i++)
{//将结点值转换为string并在中间加上-> 成为路径
sPath += to_string(path[i]);
sPath += "->";
}
sPath += to_string(path[path.size() -1]);
//将路径某条路径pushback进result内
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;
}
};