[LeetCode] 257. Binary Tree Paths 二叉树路径
Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
1 / \ 2 3 \ 5
All root-to-leaf paths are:
["1->2->5", "1->3"]
给一个二叉树,返回所有根到叶节点的路径。
Java:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public List<String> binaryTreePaths(TreeNode root) { List<String> list = new ArrayList<>(); binaryTreePathsHelper(root, list, new String()); return list; } public void binaryTreePathsHelper(TreeNode root, List<String> list, String string) { if (root == null) { return; } if (root.left == null && root.right == null) { string = string + root.val; list.add(string); return; } binaryTreePathsHelper(root.left, list, string + root.val + "->"); binaryTreePathsHelper(root.right, list, string + root.val + "->"); } }
Python:
class Solution: # @param {TreeNode} root # @return {string[]} def binaryTreePaths(self, root): result, path = [], [] self.binaryTreePathsRecu(root, path, result) return result def binaryTreePathsRecu(self, node, path, result): if node is None: return if node.left is node.right is None: ans = "" for n in path: ans += str(n.val) + "->" result.append(ans + str(node.val)) if node.left: path.append(node) self.binaryTreePathsRecu(node.left, path, result) path.pop() if node.right: path.append(node) self.binaryTreePathsRecu(node.right, path, result) path.pop()
C++: DFS
class Solution { public: vector<string> binaryTreePaths(TreeNode* root) { vector<string> res; if (root) dfs(root, "", res); return res; } void dfs(TreeNode *root, string out, vector<string> &res) { out += to_string(root->val); if (!root->left && !root->right) res.push_back(out); else { if (root->left) dfs(root->left, out + "->", res); if (root->right) dfs(root->right, out + "->", res); } } };
C++:
class Solution { public: vector<string> binaryTreePaths(TreeNode* root) { if (!root) return {}; if (!root->left && !root->right) return {to_string(root->val)}; vector<string> left = binaryTreePaths(root->left); vector<string> right = binaryTreePaths(root->right); left.insert(left.end(), right.begin(), right.end()); for (auto &a : left) { a = to_string(root->val) + "->" + a; } return left; } };
类似题目:
[LeetCode] 113. Path Sum II 路径和 II
[LeetCode] 437. Path Sum III 路径和 III