题解 | #重建二叉树#

重建二叉树

https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6

kotlin
/**
 * class TreeNode(var `val`: Int) {
 *     var left: TreeNode? = null
 *     var right: TreeNode? = null
 * }
 */

object Solution {
    /**
    * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    * 
        * @param pre int整型一维数组 
        * @param vin int整型一维数组 
        * @return TreeNode类
    */
    var pos = 0
    fun reConstructBinaryTree(pre: IntArray,vin: IntArray): TreeNode?  {
        if(pre.size == 0) return null
                //类似二分法求解,因为一个数组前序遍历,然后另外一个中序遍历,前序的第一个元素即为根元素值,
                //对应于中序数组的下标就可以将中序数组的值分为左右两部分,即根下标的左边为左子树的所有值,右边为右子树的所有值,以此类推来递归
        return dfs(pre, vin, 0, pre.size - 1)
    }
    
    private fun dfs(pre: IntArray,vin: IntArray, left: Int, right: Int): TreeNode? {
        if(left > right || pos == pre.size) return null
        val index = vin.indexOf(pre[pos])
        val root = TreeNode(pre[pos])
        pos++
        val leftNode = dfs(pre, vin, left, index - 1)        
        val rightNode = dfs(pre, vin, index + 1, right)
        root.left = leftNode
        root.right = rightNode
        return root
    }
}


全部评论

相关推荐

Aurora23:属于挂一半,暂时进池子了,隔一段时间没有其他组捞的话就彻底结束了
点赞 评论 收藏
分享
自来熟的放鸽子能手面...:这个不一定,找hr跟进一下
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务