二叉树
类型第23篇解题报告
leetcode第257题:二叉树的所有路径
https://leetcode-cn.com/problems/binary-tree-paths/
【题目】
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
输入:
1
/ \
2 3
\
5
输出: ["1->2->5", "1->3"]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
【思路】
递归遍历二叉树,存储根节点到当前节点的路径,最后遇到叶子节点时,将路径添加至结果中。
【代码】
python版本
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def binaryTreePaths(self, root):
"""
:type root: TreeNode
:rtype: List[str]
"""
if not root:
return []
res = []
self.get_path(root, [], res)
return res
def get_path(self, node, ls, res):
ls2 = copy.copy(ls)
ls2.append(node.val)
if not node.left and not node.right:
res.append("->".join(map(str, ls2)))
return
if node.left:
self.get_path(node.left, ls2, res)
if node.right:
self.get_path(node.right, ls2, res)
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:
vector<string> binaryTreePaths(TreeNode* root) {
vector<string> res;
if(!root)
return res;
get_path(root, "", res);
return res;
}
void get_path(TreeNode* node, string str, vector<string>& res){
string str2 = "";
if(str == "")
str2 = to_string(node->val);
else
str2 = str + "->" + to_string(node->val);
if(!node->left && !node->right){
res.push_back(str2);
return;
}
if(node->left)
get_path(node->left, str2, res);
if(node->right)
get_path(node->right, str2, res);
}
};