【两次过】LeetCode257:二叉树的所有路径

tech2022-09-26  89

* 给定一个二叉树,返回所有从根节点到叶子节点的路径。

 * 说明: 叶子节点是指没有子节点的节点。

 * 示例:

 * 输入:

 * ⁠  1

 * ⁠/   \

 * 2     3

 * ⁠\

 * ⁠ 5

 * 输出: ["1->2->5", "1->3"]

 * 解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3


解题思路:

直接暴力DFS。

由于要返回每次的路线,因此需要维护一个额外的path集合来存储沿途走过的节点。每次搜索路过的节点都给丢到path集合中,直到遇到叶子节点了,就把这条路径表示出来存到结果集合中。

需要注意的是,在搜索完一条路后,转而去搜索其他路线时,要回溯还原现场。

class Solution { private List<String> res = new ArrayList<>(); private List<Integer> path = new ArrayList<>(); public List<String> binaryTreePaths(TreeNode root) { dfs(root); return res; } private void dfs(TreeNode root){ if(root == null) return; path.add(root.val); if(root.left == null && root.right == null){ res.add(collection2String(path)); } dfs(root.left); dfs(root.right); path.remove(path.size()-1); } String collection2String(List<Integer> path){ StringBuilder sb = new StringBuilder(); for(int i=0; i<path.size(); i++){ sb.append(path.get(i)); if(i != path.size()-1){ sb.append("->"); } } return sb.toString(); } }

 

最新回复(0)