给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
输入: 1 / \ 2 3 \ 5 输出: ["1->2->5", "1->3"] 解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
C++
/**
* 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:
void dfs(vector<string>& res, string tmp, TreeNode* root)
{
if(root)
{
if(NULL==root->left && NULL==root->right)
{
if(0==tmp.length())
{
tmp+=to_string(root->val);
}
else
{
tmp+="->";
tmp+=to_string(root->val);
}
res.push_back(tmp);
}
else
{
if(0==tmp.length())
{
tmp+=to_string(root->val);
}
else
{
tmp+="->";
tmp+=to_string(root->val);
}
dfs(res,tmp,root->left);
dfs(res,tmp,root->right);
}
}
}
vector<string> binaryTreePaths(TreeNode* root)
{
vector<string> res;
string tmp;
dfs(res,tmp,root);
return res;
}
};
python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def dfs(self, res, tmp, root):
if root:
if None==root.left and None==root.right:
if 0==len(tmp):
res.append(tmp+str(root.val))
else:
res.append(tmp+'->'+str(root.val))
else:
if 0==len(tmp):
self.dfs(res,tmp+str(root.val),root.left)
self.dfs(res,tmp+str(root.val),root.right)
else:
self.dfs(res,tmp+'->'+str(root.val),root.left)
self.dfs(res,tmp+'->'+str(root.val),root.right)
def binaryTreePaths(self, root: TreeNode) -> List[str]:
res=[]
tmp=""
self.dfs(res,tmp,root)
return res