问题:
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"]
解决:
① 简单的二叉树遍历,遍历的过程中记录之前的路径,一旦遍历到叶子节点便将该路径加入结果中。
/**
* Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { //17ms List<String> res = new ArrayList<>(); public List<String> binaryTreePaths(TreeNode root) { if(root != null) findPath(root,String.valueOf(root.val)); return res; } public void findPath(TreeNode node,String path){ if(node.left == null && node.right == null) res.add(path); if(node.left != null) findPath(node.left,path + "->" + node.left.val); if(node.right != null) findPath(node.right,path + "->" + node.right.val); } }② 进化版
public class Solution { //15ms
public List<String> binaryTreePaths(TreeNode root) { List<String> res = new ArrayList<String>(); if (root == null) return res; getPath(root, "", res); return res; } public void getPath(TreeNode root, String path, List<String> res) { if (root.left == null && root.right == null) res.add(path + root.val); else { if (root.left != null) getPath(root.left, path + root.val + "->", res); if (root.right != null) getPath(root.right, path + root.val + "->", res); } } }【注意】return影响效率
public class Solution { //15ms
public List<String> binaryTreePaths(TreeNode root) { List<String> res = new ArrayList<String>(); if (root == null) return res; getPath(root, "", res); return res; } public void getPath(TreeNode root, String path, List<String> res) { if (root.left == null && root.right == null){ res.add(path + root.val); //return; 加上return耗时为18ms } if (root.left != null) getPath(root.left, path + root.val + "->", res); if (root.right != null) getPath(root.right, path + root.val + "->", res); } }