刷题专栏(十四):二叉树的所有路径

130 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

前言

刷题专栏到目前已经是第十四篇了,欢迎大家来关注我的刷题专栏,一起来刷题。

今天我们要来看的这道题,主要是考察二叉树的理解,没有什么逻辑,说白了,技术含量低。

下面我们就一起来看看吧。

image.png

算法题:二叉树的所有路径

从这道题的题目来看,这道题其实没什么难度的。

但是看了示例之后,发现还是对二叉树的理解要求比较高一些的。

要解出这道题,首先要通过递归的方式来拿到所有的节点数据。

而且还要在递归的过程中,拼接存在的路径。

然后将结果存入一个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可能会好一些,太懒没去试,就交给大家自己去试一试了。

image.png

总结

今天的题目没什么难度,所以比较适合对二叉树的理解不是很多的人群,或者是对二叉树不了解的朋友们。