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"]
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
Hide Similar Problems
BFS Solution:
public List<String> binaryTreePaths(TreeNode root) { List<String> answer = new ArrayList<String>(); if (root != null) searchBT(root, "", answer); return answer; } private void searchBT(TreeNode root, String path, List<String> answer) { if (root.left == null && root.right == null) answer.add(path + root.val); if (root.left != null) searchBT(root.left, path + root.val + "->", answer); if (root.right != null) searchBT(root.right, path + root.val + "->", answer); }
DFS Solution:
/** * 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) { ArrayList<String> paths = new ArrayList<String>(); dfs(root, new ArrayDeque<Integer>(), paths); return paths; } private void dfs(TreeNode node, Deque<Integer> path, List<String> paths) { if(node == null) return; path.add(node.val); if(node.left == null && node.right == null) { paths.add(mkPath(path)); } dfs(node.left, path, paths); dfs(node.right, path, paths); path.removeLast(); } private String mkPath(Deque<Integer> path) { if(path.isEmpty()) return ""; StringBuilder sb = new StringBuilder(); for(Integer i : path) { sb.append("->").append(i); } return sb.toString().substring(2); } }

浙公网安备 33010602011771号