持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
前言
刷题专栏到目前已经是第十四篇了,欢迎大家来关注我的刷题专栏,一起来刷题。
今天我们要来看的这道题,主要是考察二叉树的理解,没有什么逻辑,说白了,技术含量低。
下面我们就一起来看看吧。
算法题:二叉树的所有路径
从这道题的题目来看,这道题其实没什么难度的。
但是看了示例之后,发现还是对二叉树的理解要求比较高一些的。
要解出这道题,首先要通过递归的方式来拿到所有的节点数据。
而且还要在递归的过程中,拼接存在的路径。
然后将结果存入一个List集合中,这里的List集合只是用来存储路径的,所以不要过多的被这个参数影响。
下面就来看一下具体的代码逻辑吧。
代码展示
今天执行的代码如下所示,主要是利用递归来实现的,这个方式还是挺好理解的。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<String> binaryTreePaths(TreeNode root) {
List<String> resultList = new ArrayList<String>();
path(root, "", resultList);
return resultList;
}
public void path(TreeNode root, String path, List<String> resultList) {
if (root != null) {
StringBuffer p = new StringBuffer(path);
p.append(Integer.toString(root.val));
if (root.left == null && root.right == null) {
resultList.add(p.toString());
} else {
p.append("->");
path(root.left, p.toString(), resultList);
path(root.right, p.toString(), resultList);
}
}
}
}
代码执行结果
执行结果还可以,主要是StringBuffer占内存了,换成StringBuild可能会好一些,太懒没去试,就交给大家自己去试一试了。
总结
今天的题目没什么难度,所以比较适合对二叉树的理解不是很多的人群,或者是对二叉树不了解的朋友们。