美文网首页
每日一算法之二叉树的所有路径

每日一算法之二叉树的所有路径

作者: MzDavid | 来源:发表于2018-12-05 09:41 被阅读2次

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

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

    示例:

    输入:
    
       1
     /   \
    2     3
     \
      5
    
    输出: ["1->2->5", "1->3"]
    
    解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
    

    有关二叉树的问题绝大多数都可以通过递归解决。先序遍历二叉树,将每个节点加在字符串的后面。

    /**
     * Definition for a binary tree node.
     * class TreeNode(var `val`: Int = 0) {
     *     var left: TreeNode? = null
     *     var right: TreeNode? = null
     * }
     */
    class Solution {
        fun binaryTreePaths(root: TreeNode?): List<String> {
            val result = ArrayList<String>()
            binaryTreePaths2(root, "", result)
            return result
        }
        private fun binaryTreePaths2(root: TreeNode?, str: String, result: MutableList<String>) {
            var mStr = str
            if (root == null) return
    
            if (mStr.isEmpty()){
                mStr = root.`val`.toString() + ""
            }else{
                mStr += "->" + root.`val`
            }
    
            if (root.left != null || root.right != null) {
                binaryTreePaths2(root.left, mStr, result)
                binaryTreePaths2(root.right, mStr, result)
            } else {
                result.add(mStr)
            }
        }
        
    }
    

    发现一个问题,在leetcode上,同样的代码逻辑,同样的测试用例,Java代码17ms,Kotlin却要用352 ms,这差距有点太大了吧。

    相关文章

      网友评论

          本文标题:每日一算法之二叉树的所有路径

          本文链接:https://www.haomeiwen.com/subject/vjqicqtx.html