Kotlin 题解 | #牛群的最大高度#

牛群的最大高度

https://www.nowcoder.com/practice/f745023c5ac641c9914a59377dacdacf

/**
 * class TreeNode(var `val`: Int) {
 *     var left: TreeNode? = null
 *     var right: TreeNode? = null
 * }
 */
object Solution {
    /**
    * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
    *
    * 
        * @param root TreeNode类 
        * @return int整型
    */
    fun findMaxHeight(root: TreeNode?): Int  {
        // write code here
        var maxResult = 0
        // maxResult = preListRecurrence(root, maxResult)
        // maxResult = middleListRecurrence(root, maxResult)
        // maxResult = lastListRecurrence(root, maxResult)
        // maxResult = preListStack(root)
        // maxResult = middleListStack(root)
        maxResult = lastListStack(root)
        return maxResult
    }

    // 前序递归
    fun preListRecurrence(root: TreeNode?, maxResult: Int): Int {
        var maxN = maxResult
        if (root != null) {
            if(root?.`val` > maxN) {
                maxN = root.`val`
            }
            maxN = preListRecurrence(root?.left, maxN)
            maxN = preListRecurrence(root?.right, maxN)
        }
        return maxN
    }

    // 中序递归
    fun middleListRecurrence(root: TreeNode?, maxResult: Int): Int {
        var maxN = maxResult
        if (root != null) {
            maxN = middleListRecurrence(root?.left, maxN)
            if(root?.`val` > maxN) {
                maxN = root.`val`
            }
            maxN = middleListRecurrence(root?.right, maxN)
        }
        return maxN
    }

    // 后序递归
    fun lastListRecurrence(root: TreeNode?, maxResult: Int): Int {
        var maxN = maxResult
        if (root != null) {
            maxN = middleListRecurrence(root?.left, maxN)
            maxN = middleListRecurrence(root?.right, maxN)
            if(root?.`val` > maxN) {
                maxN = root.`val`
            }
        }
        return maxN
    }

    // 前序栈
    fun preListStack(root: TreeNode?): Int {
        var maxN = 0
        var stack = mutableListOf<TreeNode?>()
        stack.add(root)
        maxN = root?.`val` ?: 0
        while (!stack.isEmpty()) {
            var root = stack.lastOrNull()
            stack.remove(root)
            if (root?.right != null) {
                 stack.add(root.right)
                 if( (root?.right?.`val` ?: 0) > maxN){
                    maxN = root?.right?.`val` ?: 0
                 }
             }
            if (root?.left != null) {
                stack.add(root.left)
                 if((root?.left?.`val` ?: 0) > maxN){
                    maxN = root?.left?.`val` ?: 0
                 }
             }
        }
        return maxN
    }

    // 中序栈
    fun middleListStack(root: TreeNode?): Int {
        var maxN = 0
        val stack = mutableListOf<TreeNode?>()
        maxN = root?.`val` ?: 0
        var nodeCu = root
        while (nodeCu != null || !stack.isEmpty()) {
            while (nodeCu != null) {
                stack.add(nodeCu)
                nodeCu = nodeCu.left
            }
            nodeCu = stack.lastOrNull()
            stack.remove(nodeCu)
            if(nodeCu?.`val` != null && nodeCu.`val` > maxN) {
                maxN = nodeCu.`val`
            }
            nodeCu = nodeCu?.right
        }
        return maxN
    }

    // 后序栈
    fun lastListStack(root: TreeNode?): Int {
        var maxN = 0
        val stack = mutableListOf<TreeNode?>()
        maxN = root?.`val` ?: 0
        //中间栈
        val output = mutableListOf<TreeNode?>()
        var nodeCu = root
        while (nodeCu != null || !stack.isEmpty()) {
            if (nodeCu != null) {
                output.add(nodeCu)
                stack.add(nodeCu)
                nodeCu = nodeCu.right
            } else {
                nodeCu = stack.lastOrNull()
                stack.remove(nodeCu)
                nodeCu = nodeCu?.left
            }
        }
        while (!output.isEmpty()) {
            var node = output.lastOrNull()
            output.remove(node)
            if(node?.`val` != null && node.`val` > maxN) {
                maxN = node.`val`
            }
        }
        return maxN
    }
}



二叉树的前中后序递归和栈的两种实现

#kotlin#
全部评论

相关推荐

2025-12-15 14:16
门头沟学院 Java
回家当保安:发offer的时候会背调学信网,最好不要这样。 “27届 ”和“28届以下 ”公司招聘的预期是不一样的。
实习简历求拷打
点赞 评论 收藏
分享
时间线:&nbsp;1.4-1.5:&nbsp;boss&nbsp;牛客&nbsp;官网&nbsp;实习僧海投了两天,&nbsp;感觉确实没啥招人的啊,&nbsp;心里凉了一半.1.6:&nbsp;中午快手约面,&nbsp;下午字节hr飞书私聊约面,&nbsp;当时想着第一次面大厂感觉三个过一个一面就已经赢了.1.7:&nbsp;下午&nbsp;3点大厂处女面,&nbsp;哈哈面试官是重邮红岩的直接保送;&nbsp;5点快手一面,&nbsp;我说这个是我的第二次大厂面试,&nbsp;面试官问要是拿到字节和快手选择哪个,&nbsp;我说昨天看了一晚上快手百分百选快手哈哈哈.&nbsp;晚上5.30字节约二面,&nbsp;快手约二面,&nbsp;小红书约一面.1.8:&nbsp;下午2点快手二面,&nbsp;聊天面体验非常好(当天电话确认入职时间);&nbsp;4点字节二面这次不是校友了,&nbsp;然后有一个CSS实现switch效果的忘记属性咋写了,&nbsp;感觉危了;&nbsp;7.30&nbsp;问字节hr是不是挂了;&nbsp;9点开始小红书一面,&nbsp;难死我了,&nbsp;但我还是笑着面完了,&nbsp;然后卸载了小红书,&nbsp;但是过了一会会小红书hr约二面,&nbsp;遂下回来了字节约三面.1.9:&nbsp;下午2点字节三面,&nbsp;依旧聊天+算法,&nbsp;自己太菜了有一个写错了,&nbsp;面完感觉又危了;&nbsp;5点面小红书20min结束(offer审批);5.30又去问字节hr是不是挂了,&nbsp;hr小姐姐说干嘛用一个句式,&nbsp;我说手写题又又又没写出来😂,&nbsp;2min后约hr面;8.30&nbsp;快手offer总结,&nbsp;自己运气好遇到了好公司好部门好面试官,&nbsp;字节剪映&nbsp;快手电商&nbsp;小红书支付的面试体验都非常好,&nbsp;不会的题会带你一步一步思考,&nbsp;流程也非常快全部都是当天推进,&nbsp;小红书是以分钟为单位推进.&nbsp;&nbsp;面经以及细节等我慢慢整理,&nbsp;&nbsp;以及保佑所有的审批不要出问题,&nbsp;我是真怕最后全过了0offer😂bg:&nbsp;重邮&nbsp;大数据&nbsp;蓝山工作室&nbsp;一段非大厂实习
独角仙梦境:这是真👻了
找实习记录
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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