Привет Есть задача про равенство бин деревьев https://leetcode.com/problems/same-tree/description/ Решил решить итеративно и

наткнулся на интересный момент. Не подскажите где может быть логическая ошибка?
Идея
1) Цикл работает пока оба итератера не уйдут в null
2) Если какой-то итератор null, а другой нет - то вернем false
3) Если текущие значения итераторов не равны друг другу - вернем false
4) Если значения детей не равны друг другу - вернем false
5) кладем в стек детей первого и второго итераторов
fun isSameTree(p: TreeNode?, q: TreeNode?): Boolean {
val leftStack = Stack<TreeNode?>()
leftStack.push(p)
val rightStack = Stack<TreeNode?>()
rightStack.push(q)

while (leftStack.peek() != null || rightStack.peek() != null) {
val l = leftStack.pop()
val r = rightStack.pop()

if ((l != null && r == null) || (l == null && r != null))
return false

if (l?.`val` != r?.`val`)
return false
if ((l?.left?.`val` != r?.left?.`val`) || (l?.right?.`val` != r?.right?.`val`))
return false

leftStack.push(l?.left)
rightStack.push(r?.left)
leftStack.push(l?.right)
rightStack.push(r?.right)
}

return true
}

Код имеет багу. Эмпирическим путем понял, что тут надо не класть в стек элемент, если он null, но не могу доказать себе почему. Не подскажите в чем ошибка?

3 ответов

32 просмотра

😳😳😳 она в одну строчку решается обычной рекурсией ну или итеративно и проверкой правой и левой ноды уходя в поддеревья

Данил
😳😳😳 она в одну строчку решается обычной рекурсией ...

возможно я не до конца понял задачу, но возможно деревья одинаковы, но по разному подвешены?

Похожие вопросы

Обсуждают сегодня

Всем привет Есть достаточно базовая задача: Дан неориентированный граф. Требуется определить, есть ли в нем цикл, и, если есть, вывести его. Входные данные подаются в виде ма...
Αλeksandr
10
Привет всем. Подскажите, как можно данную задачу более менее эффективно решить? В столовой одного известного Завода вот-вот начнётся обед. На обеде есть три гарнира — макарош...
Vitaliy
6
всем привет. У меня есть неупорядоченный массив точек(в моем случае в трёхмерном пространстве). Есть критерий связанности точек: если евклидово расстояние между ними меньше за...
Павлик Ливаткин
31
Доброе утро. Такой вопрос: есть ли какие-то практически полезные меры вычислительной мощности (в смысле computational complexity) для реальных машин, с ограниченными ресурсам...
Yaroslav Schekin
15
Всем привет Пытаюсь решить следующую задачу: https://informatics.msk.ru/mod/statements/view.php?id=6992&chapterid=101#1 Строка S была записана много раз подряд, после чего из ...
Αλeksandr
10
Здравствуйте. Есть задача нужно найти наименшое число P где фактриал P делиться на 10^N. Ограничения 10^9. Знаю что нужно найти такой P в конце как минимум N нулей. Решение с ...
. Azmiddin
20
Друзья, практический вопрос надо счиать скользящую медиану в последовательности по заданному окну (длины N) тупой вариант - взять значения в окне, отсортировать, взять элеме...
Стас Выщепан
17
Должна-ли работать такая стратегия: Мы каждую секунду бросаем монетку - орел или решка. Если орел - покупаем акцию на все деньги, если у нас есть деньги, или продаем все акци...
George Polevoy
13
#pragma once #include <iostream> #include <vector> template <typename T, typename Comp = std::less<T>> class Heap { public: Heap() = default; Heap(const std::vector<T>&...
Степан
1
Как можно сжимать временные ряды в памяти? У меня есть исторические стоимости ценных бумаг. Данные для каждой минуты в истории OHLC (Open, High, Low, Close). Соответственно, O...
George Polevoy
10
Карта сайта