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"]

链接: 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在一个函数中完成。留给二刷。

原文地址:https://www.cnblogs.com/panini/p/6504815.html