Given the root
of a binary tree, return all root-to-leaf paths in any order.
A leaf is a node with no children.
Example 1:
Input: root = [1,2,3,null,5] Output: ["1->2->5","1->3"]
Example 2:
Input: root = [1] Output: ["1"]
Constraints:
- The number of nodes in the tree is in the range
[1, 100]
. -100 <= Node.val <= 100
class Solution {
private:
void traversal(TreeNode*root,vector<int>&path,vector<string>&result){
path.push_back(root->val);
//叶节点
if(root->left==NULL && root->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(root->left){
traversal(root->left,path,result);
path.pop_back();
}
if(root->right){
traversal(root->right,path,result);
path.pop_back();
}
}
public:
vector<string> binaryTreePaths(TreeNode* root) {
vector<int>path;
vector<string>result;
if(root==NULL)return result;
traversal(root,path,result);
return result;
}
};
思路:
1,traversal函数中用引用传递
2,travelsal函数:(前序遍历)
1)首先把此时的根节点push_back进result
2)如果是叶节点(left,right==NULL),用一个for循环,把此时path中所有的数值都用->连接(用一个string保存),但是最后一个数后面不用“->”,所以注意for循环的终止条件是i==path.size()-1(如果写成path.size(),会导致缓冲区溢出),return
3)左节点(右结点)不为空时,递归+回溯(记住,这里是path.pop,不是result)
3,binaryTreePaths函数中,应先声明result后才能在根节点为空时返回result,注意返回值类型。