题解 | #重建二叉树#

重建二叉树

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
    }
}


全部评论

相关推荐

机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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