1 题目
Given a binary tree, return all root-to-leaf paths.
Note: A leaf is a node with no children.
Example:
Input:
1
/ \
2 3
\
5
Output: ["1->2->5", "1->3"]
Explanation: All root-to-leaf paths are: 1->2->5, 1->3
2 尝试解
2.1 分析
在二叉树中,求根节点到所有叶子结点的路径,用递归的方法,遍历二叉树。
2.2 代码
class Solution {
public:
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> output;
if(root==NULL) return output;
vector<vector<int>>result;
vector<int> temp;
traverse(root,temp,result);
for(int i = 0; i < result.size();i++){
string temp ="";
for(int j = 0; j < result[i].size(); j ++){
temp += to_string(result[i][j]) + "->";
}
temp.pop_back();
temp.pop_back();
output.push_back(temp);
}
return output;
}
void traverse(TreeNode* root,vector<int>&temp,vector<vector<int>>&result){
if(root == NULL) return;
temp.push_back(root->val);
if(root->left == NULL && root->right == NULL){
result.push_back(temp);
}
if(root->left!= NULL) traverse(root->left,temp,result);
if(root->right != NULL) traverse(root->right,temp,result);
temp.pop_back();
}
};
3 标准解
void binaryTreePaths(vector<string>& result, TreeNode* root, string t) {
if(!root->left && !root->right) {
result.push_back(t);
return;
}
if(root->left) binaryTreePaths(result, root->left, t + "->" + to_string(root->left->val));
if(root->right) binaryTreePaths(result, root->right, t + "->" + to_string(root->right->val));
}
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> result;
if(!root) return result;
binaryTreePaths(result, root, to_string(root->val));
return result;
}