Leetcode 题解 - 搜索--Backtracking(12):输出二叉树中所有从根到叶子的路径
2019-05-27 10:41
661 查看
[LeetCode] Binary Tree Paths 二叉树路径
Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
[code] 1 / \ 2 3 \ 5
All root-to-leaf paths are:
[code]["1->2->5", "1->3"]
这道题给我们一个二叉树,让我们返回所有根到叶节点的路径,跟之前那道Path Sum II很类似,比那道稍微简单一些,不需要计算路径和,只需要无脑返回所有的路径即可,那么思路还是用递归来解,博主之前就强调过,玩树的题目,十有八九都是递归,而递归的核心就是不停的DFS到叶结点,然后在回溯回去。在递归函数中,当我们遇到叶结点的时候,即没有左右子结点,那么此时一条完整的路径已经形成了,我们加上当前的叶结点后存入结果res中,然后回溯。注意这里结果res需要reference,而out是不需要引用的,不然回溯回去还要删除新添加的结点,很麻烦。为了减少判断空结点的步骤,我们在调用递归函数之前都检验一下非空即可,代码而很简洁,参见如下:
[code]/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public List<String> binaryTreePaths(TreeNode root) { List<String> paths = new ArrayList<>(); List<Integer> values = new ArrayList<>(); if(root == null) return paths; help(root, values, paths); return paths; } //主要思路:判断是不是叶子节点 是的话返回每次遍历的结果,不是的话就往下 往下就是左右两个子树分别进行 private void help(TreeNode node, List<Integer> values, List<String> paths){ if(node == null) return; values.add(node.val); if(isLeaf(node)){ paths.add(buildPath(values)); }else{ help(node.left, values, paths); help(node.right, values, paths); } //当这个节点遍历之后,无论返回结果与否, 需要删除这个节点保障不影响下次的判断 values.remove(values.size() - 1); } private boolean isLeaf(TreeNode node){ return node.left == null && node.right == null; } private String buildPath(List<Integer> value){ StringBuilder sb = new StringBuilder(); for(int i=0; i < value.size(); i++){ sb.append(value.get(i)); if(i != value.size() - 1) sb.append("->"); } return sb.toString(); } }
相关文章推荐
- 每天一道LeetCode-----以字符串的形式输出二叉树所有从根节点到叶子节点的路径
- 二叉树基本操作(输出所有叶子节点到根节点的路径)
- 【Leetcode】Binary Tree Paths 二叉树根结点到所有叶子结点的路径
- 输出二叉树中所有从根结点到叶子结点的路径
- 打印二叉树根结点到所有叶子结点的路径
- leetcode Sum Root to Leaf Numbers 二叉树所有叶节点的路径和
- LeetCode写题历程——257. 二叉树的所有路径
- 二叉树系列——路径系列:根节点到子节点的路径以及根节点到叶子节点的所有路径
- Leetcode 题解 - 搜索--Backtracking(21):分割字符串使得每个部分都是回文数
- 找出所有从根节点到叶子节点路径和等于n的路径并输出
- 二叉树的所有叶子结点到根结点的路径
- 输出二叉树路径上的所有和为K的路径
- 输出二叉树的所有路径
- Leetcode 题解 - 搜索--Backtracking(15):组合
- Leetcode 题解 - 搜索--Backtracking(20):含有相同元素求子集
- 二叉树-输出树中从根到每个叶子节点的路径
- 每天一道LeetCode-----计算二叉树所有根节点到叶子节点的和
- 【LeetCode】二叉树的所有路径 - Easy(FB,Google)
- 数据结构--二叉树--输出树中从根到每个叶子节点的路径(树遍历算法的应用) .
- [Leetcode] 257. 二叉树的所有路径 java