План курса / Все задачи / Алгоритмы и структуры данных
Идентичные деревья
легко
Даны корни двух бинарных деревьев. Нужно проверить, являются ли деревья одинаковыми. Деревья являются одинаковыми, если имеют одинаковую структуру и узлы имеют одинаковое значение
ВАЖНО: реализуй обход с использованием рекурсии
Пример 1:
Ввод: p = [5,3,6,null,null,4,7], q = [5,3,6,null,null,4,7]
Вывод: true
Пример 2:
Ввод: p = [1,2], q = [1,null,2]
Вывод: false
Пример 3:
Ввод: p = [1,2,1], q = [1,1,2]
Вывод: false
Ограничения:
Число узлов в дереве >= 1
Высота дерева <= 1000
Значение вершин дерева лежит в диапазоне [-10 000, 10 000] (включительно)
/**
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int val, TreeNode left=null, TreeNode right=null) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
public class Solution
{
public static bool IsSameTree(TreeNode p, TreeNode q)
{
if (p == null || q == null)
{
return p == null && q == null;
}
if (p.val != q.val)
{
return false;
}
return IsSameTree(p.left, q.left) && IsSameTree(p.right, q.right);
}
}
from tree_node import TreeNode
# class TreeNode:
# def __init__(self, val, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
def is_same_tree(p: Optional[TreeNode], q: Optional[TreeNode]) -> bool:
if p is None or q is None:
return p is None and q is None
if p.val != q.val:
return False
return is_same_tree(p.left, q.left) and is_same_tree(p.right, q.right)