题目:
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"]
链接: http://leetcode.com/problems/binary-tree-paths/
3/4/2017
碰到的问题:
1. Java调用函数当中值是如何传递的,按照这种做法,C++可能需要用reference/pointer, Python可能需要返回值,Java这里可以直接在calling function中用,挺神奇。
2. parentNodes不要被之前的结果影响,当完成左子树时候应该回到本来的长度。第20行应该不需要subList,但是第23行绝对需要。
3. root == null时应该还是返回ret, 而不是null
4. 效率比较低,还有这道题几乎是蒙对的。
1 public class Solution { 2 public List<String> binaryTreePaths(TreeNode root) { 3 List<String> ret = new ArrayList<String>(); 4 if (root == null) return ret; 5 6 List<String> s = new ArrayList<String>(); 7 binaryTreePath(root, s, ret); 8 return ret; 9 } 10 private void binaryTreePath(TreeNode root, List<String> parentNodes, List<String> allPaths) { 11 int length = parentNodes.size(); 12 if (root.left == null && root.right == null) { 13 parentNodes.add(Integer.toString(root.val)); 14 String path = String.join("->", parentNodes); 15 allPaths.add(path); 16 return; 17 } else { 18 parentNodes.add(Integer.toString(root.val)); 19 if (root.left != null) { 20 binaryTreePath(root.left, parentNodes.subList(0, length + 1), allPaths); 21 } 22 if (root.right != null) { 23 binaryTreePath(root.right, parentNodes.subList(0, length + 1), allPaths); 24 } 25 } 26 27 } 28 }
看别人的算法,不需要传值parentNodes, allPaths,可以直接利用stack做DFS recursive在一个函数中完成。留给二刷。