Решение
class Solution {
fun postorderTraversal(root: TreeNode?): List<Int> {
val res = ArrayList<Int>()
val dummy = TreeNode(0)
dummy.left = root
var cur: TreeNode? = dummy
fun reverse(from: TreeNode, to: TreeNode) {
var a: TreeNode? = from
var b: TreeNode? = from.right
while (a !== to) {
val c = b!!.right
b.right = a
a = b
b = c
}
}
fun visit(from: TreeNode, to: TreeNode) {
reverse(from, to)
var p: TreeNode? = to
while (true) {
res.add(p!!.`val`)
if (p === from) break
p = p.right
}
reverse(to, from)
}
while (cur != null) {
val left = cur.left
if (left == null) {
cur = cur.right
} else {
var pre = left
while (pre.right != null && pre.right !== cur) pre = pre.right
if (pre.right == null) {
pre.right = cur
cur = cur.left
} else {
visit(left, pre)
pre.right = null
cur = cur.right
}
}
}
return res
}
}