leetcode 257. 二叉树的所有路径
题目:257. 二叉树的所有路径
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明:
叶子节点是指没有子节点的节点。
示例:
输入:
输出: [“1->2->5”, “1->3”]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
方法:Backtracking(回溯)
思路:Backtracking(回溯),从根节点往左右节点搜索,每搜索到一个节点,记录到该节点的路径,如果当前节点左右子节点都为null,则该节点为叶子节点,将叶子节点路径保存进结果集,如果当左子节点为null,回退到上一步,复原当前记录的节点路径,搜索右子节点。
运行数据:执行用时:7 ms,内存消耗:40.3 MB
复杂度分析:
- 时间复杂度:O(n),n为二叉树节点数目。
- 空间复杂度:O(n),n为二叉树节点数目。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| public List<String> binaryTreePaths(TreeNode root) { List<String> result = new ArrayList<String>();
backtracking(root, result, new StringBuilder());
return result; }
private void backtracking(TreeNode node, List<String> result, StringBuilder prefix) {
if (node == null) { return ; }
String tempString = node.val + ""; if (prefix.length() != 0) { tempString = "->" + tempString; } prefix.append(tempString);
if (node.left == null && node.right == null) { result.add(prefix.toString()); } else { backtracking(node.left, result, prefix); backtracking(node.right, result, prefix); }
prefix.delete(prefix.length() - tempString.length(), prefix.length());
}
|
学习所得,资料、图片部分来源于网络,如有侵权,请联系本人删除。
才疏学浅,若有错误或不当之处,可批评指正,还请见谅!