LeetCode257——二叉树的所有路径

我的LeetCode代码仓:https://github.com/617076674/LeetCode

原题链接:https://leetcode-cn.com/problems/binary-tree-paths/description/

题目描述:

LeetCode257——二叉树的所有路径_第1张图片

知识点:树、深度优先遍历、递归

思路:利用递归实现二叉树的深度优先遍历

递归出口

(1)如果root为null,说明这是一棵空树,直接返回一个空的result结果即可,result是一个List类型的变量。

(2)如果root的左右孩子均为null,说明这棵树中只有一个节点,我们将该节点添加进result中,并直接返回result即可。

递归过程

递归调用该函数计算左子树和右子树的路径值,并和原root节点的值进行拼接得到所有路径,最后返回result。

时间复杂度是O(n),其中n是二叉树中的节点个数。空间复杂度是O(h),其中h为二叉树的高度。

JAVA代码:

public class Solution {
    public List binaryTreePaths(TreeNode root) {
        List result = new ArrayList<>();
        if (null == root) {
            return result;
        }
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(root.val);
        if(root.left == null && root.right == null) {
            result.add(stringBuilder.toString());
            return result;
        }
        stringBuilder.append("->");
        List leftResult = binaryTreePaths(root.left);
        List rightResult = binaryTreePaths(root.right);
        for (String string : leftResult) {
            StringBuilder temp = new StringBuilder();
            result.add(temp.append(stringBuilder).append(string).toString());
        }
        for (String string : rightResult) {
            StringBuilder temp = new StringBuilder();
            result.add(temp.append(stringBuilder).append(string).toString());
        }
        return result;
    }
}

LeetCode解题报告:

LeetCode257——二叉树的所有路径_第2张图片

 

你可能感兴趣的:(LeetCode题解,LeetCode,二叉树的所有路径,深度优先遍历,递归)