leetcode每日一题 257. 二叉树的所有路径
题目描述
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
解题思路
本题考察二叉树的深度优先搜索,可使用回溯法对给定二叉树进行深搜,注意搜索过程中保存路径上的结点信息,当到达叶子节点时生成路径,并回溯继续搜索,直至整棵树遍历完毕。
题解代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> path;
vector<string> ans;
void backtrack(TreeNode * node){
path.push_back(node->val);
if(node->left==NULL&&node->right==NULL){//到叶子结点,生成路径
string str="";
str+=to_string(path[0]);//先放入第一个,避免"->"多余
for(auto it=path.begin()+1;it<path.end();it++){
str+="->";
str+=to_string(*it);
}
ans.push_back(str);
return;
}
if(node->left!=NULL){
backtrack(node->left);
path.pop_back();
}
if(node->right!=NULL){
backtrack(node->right);
path.pop_back();
}
}
vector<string> binaryTreePaths(TreeNode* root) {
if(root!=NULL){//注意root为null时可直接返回空
backtrack(root);
}
return ans;
}
};