TGViewer
Kotlin | LeetCode Kotlin | LeetCode @easy_kotlin_task · 1.7K subscribers
Post #1561 183
Задача: 971. Flip Binary Tree To Match Preorder Traversal
Сложность: medium

Дано корневое дерево с n узлами, где каждому узлу уникально присвоено значение от 1 до n. Также дана последовательность из n значений voyage, которая является желаемым обходом дерева в порядке pre-order.

Любой узел в бинарном дереве можно перевернуть, поменяв местами его левое и правое поддеревья. Например, переворот узла 1 будет иметь следующий эффект:

Переверните минимальное количество узлов, чтобы обход дерева в порядке pre-order соответствовал voyage.

Верните список значений всех перевернутых узлов. Вы можете вернуть ответ в любом порядке. Если невозможно перевернуть узлы в дереве, чтобы сделать обход в порядке pre-order соответствующим voyage, верните список [-1].

Пример:
Input: root = [1,2], voyage = [2,1]
Output: [-1]
Explanation: It is impossible to flip the nodes such that the pre-order traversal matches voyage.


👨‍💻 Алгоритм:

1⃣Выполните поиск в глубину. Если в каком-либо узле значение узла не соответствует значению в voyage, верните [-1].

2⃣Иначе определите, когда нужно перевернуть: если следующее ожидаемое число в voyage (voyage[i]) отличается от следующего потомка.

3⃣Переверните узел, добавьте его значение в список перевернутых узлов и продолжите обход дерева, пока весь порядок обхода pre-order не будет соответствовать voyage.

😎 Решение:
class Solution {
var flipped = mutableListOf<Int>()
var index = 0
lateinit var voyage: IntArray

fun flipMatchVoyage(root: TreeNode?, voyage: IntArray): List<Int> {
flipped = mutableListOf()
index = 0
this.voyage = voyage

dfs(root)
if (flipped.isNotEmpty() && flipped[0] == -1) {
return listOf(-1)
}

return flipped
}

fun dfs(node: TreeNode?) {
if (node != null) {
if (node.`val` != voyage[index++]) {
flipped.clear()
flipped.add(-1)
return
}

if (index < voyage.size && node.left != null && node.left.`val` != voyage[index]) {
flipped.add(node.`val`)
dfs(node.right)
dfs(node.left)
} else {
dfs(node.left)
dfs(node.right)
}
}
}
}


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_kotlin_task
  1. Oct 11, 2026Задача: 1015. Smallest Integer Divisible by K Сложность: medium Задано целое положительное…
  2. Oct 9, 2026Задача: 1102. Path With Maximum Minimum Value Сложность: medium Дана целочисленная матрица…
  3. Oct 7, 2026Задача: 257. Binary Tree Paths Сложность: easy Дано корневое дерево, верните все пути от к…
  4. Oct 7, 2026🔥 Скрытые вакансии с удаленной работой для Android разработчика, которые нигде больше не…
  5. Oct 6, 2026Задача: 491. Non-decreasing Subsequences Сложность: medium Дан массив целых чисел nums. Ве…
  6. Oct 5, 2026Задача: 635. Design Log Storage System Сложность: medium Вам дается несколько журналов, гд…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →