257.二叉树的所有路径

2020-01-10  本文已影响0人  qiHuang112

题目#257.二叉树的所有路径

给定一个二叉树,返回所有从根节点到叶子节点的路径。

说明:叶子节点是指没有子节点的节点。

示例:

思路分析

二叉树遍历所有路径并保存下来,这种问题属于典型的回溯法,即我们需要使用一个中间变量在遍历过程中保存遍历时经过的节点,在回到上一个节点时需要将最后一个节点删除,以保证不影响其他分支的遍历结果。
那回过头来,我们在代码中需要关注的重点是什么呢?

代码展示

fun binaryTreePaths(root: TreeNode?): List<String> {
    if (root == null) return emptyList()
    val res = ArrayList<String>()
    dfs(res, root, ArrayList())
    return res
}

private fun dfs(res: ArrayList<String>, root: TreeNode, temp: ArrayList<Int>) {
    temp.add(root.`val`)
    if (root.left == null && root.right == null) {
        res.add(temp.joinToString("->") { it.toString() })
        temp.removeAt(temp.lastIndex)
        return
    }
    if (root.left != null) {
        dfs(res, root.left!!, temp)
    }
    if (root.right != null) {
        dfs(res, root.right!!, temp)
    }
    temp.removeAt(temp.lastIndex)
}

代码分析

在代码的11行,使用了扩展方法joinToString拼接字符串,这是kotlin中一个比较常用的高阶函数,还是十分方便的,主要功能就是能将Iterable对象经过一定的处理遍历之后拼接成字符串,拼接的连接符默认是“, ”,通过默认参数的方式给出,实际上java也有类似的方法String.join,是JDK1.8加入的,具体用法如下:
System.out.println(String.join("->", "h", "h", "h", "h"));

上一篇 下一篇

猜你喜欢

热点阅读