https://leetcode.com/problems/binary-tree-preorder-traversal Easy

Решение

class Solution {
    fun preorderTraversal(root: TreeNode?): List<Int> {
        val res = ArrayList<Int>()
        var cur = root
        while (cur != null) {
            val left = cur.left
            if (left == null) {
                res.add(cur.`val`)
                cur = cur.right
            } else {
                var prev = left
                while (prev.right != null && prev.right !== cur) prev = prev.right
                if (prev.right == null) {
                    res.add(cur.`val`)
                    prev.right = cur
                    cur = cur.left
                } else {
                    prev.right = null
                    cur = cur.right
                }
            }
        }
        return res
    }
}