Same Tree

https://leetcode.com/problems/same-tree/description/Easy

Условие

Даны корни 2 бинарных деревьев p и q. Напишите функцию, которая проверит, являются ли они одинаковыми или нет. Два бинарных дерева считаются одинаковыми, если они структурно идентичны, а узлы имеют одинаковое значение.

Примеры

Input: p = [1, 2, 3], q = [1, 2, 3]

Output: true
Input: p = [1, 2], q = [1, null, 2]

Output: false
Input: p = [1, 2, 1], q = [1, 1, 2]

Output: false

Решение

/**
 * Example:
 * var ti = TreeNode(5)
 * var v = ti.`val`
 * Definition for a binary tree node.
 * class TreeNode(var `val`: Int) {
 *     var left: TreeNode? = null
 *     var right: TreeNode? = null
 * }
 */
fun isSameTree(p: TreeNode?, q: TreeNode?): Boolean {
    if (p == null && q == null) return true // оба дерева пустые
    if (p == null || q == null) return false // одно дерево пустое
    return p.`val` == q.`val` && isSameTree(p.left, q.left) && isSameTree(p.right, q.right) // сравнение значений и рекурсивный вызов
}

Временная сложность

O(n), где n — количество узлов в дереве.

Пространственная сложность

O(h), где h — высота дерева (для стека вызовов рекурсии).