https://leetcode.com/problems/minimum-depth-of-binary-tree Easy

Решение

class Solution {
    fun minDepth(root: TreeNode?): Int {
        if (root == null) return 0
        var cap = 1024
        var q = arrayOfNulls<TreeNode>(cap)
        var head = 0
        var tail = 0
        var size = 0
        fun en(x: TreeNode) {
            if (size == cap) {
                val nq = arrayOfNulls<TreeNode>(cap shl 1)
                var i = 0
                while (i < size) {
                    nq[i] = q[(head + i) and (cap - 1)]
                    i++
                }
                q = nq
                cap = cap shl 1
                head = 0
                tail = size
            }
            q[tail] = x
            tail = (tail + 1) and (cap - 1)
            size++
        }
        fun de(): TreeNode {
            val x = q[head]!!
            q[head] = null
            head = (head + 1) and (cap - 1)
            size--
            return x
        }

        en(root)
        var depth = 1
        while (size > 0) {
            var level = size
            while (level > 0) {
                val node = de()
                val l = node.left
                val r = node.right
                if (l == null && r == null) return depth
                if (l != null) en(l)
                if (r != null) en(r)
                level--
            }
            depth++
        }
        return depth
    }
}