Сложность: medium
Вам даны два бинарных дерева root1 и root2. Представьте, что при наложении одного из них на другое некоторые узлы двух деревьев перекрываются, а другие - нет. Вам нужно объединить эти два дерева в новое бинарное дерево. Правило слияния таково: если два узла пересекаются, то в качестве нового значения объединенного узла используется сумма значений узлов. В противном случае в качестве узла нового дерева будет использоваться узел NOT null. Возвращается объединенное дерево. Примечание: Процесс объединения должен начинаться с корневых узлов обоих деревьев.
Пример:
Input: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
Output: [3,4,5,5,4,null,7]
👨💻 Алгоритм:
1⃣Если один из узлов пуст (null), возвращаем другой узел. Если оба узла пустые, возвращаем null.
2⃣Если оба узла не пустые, создаем новый узел, значение которого равно сумме значений двух узлов. Рекурсивно объединяем левые и правые поддеревья.
3⃣Возвращаем новый узел, который является корнем объединенного дерева.
😎 Решение:
class TreeNode {
public $val;
public $left;
public $right;
function __construct($val = 0, $left = null, $right = null) {
$this->val = $val;
$this->left = $left;
$this->right = $right;
}
}
function mergeTrees($root1, $root2) {
if ($root1 === null) {
return $root2;
}
if ($root2 === null) {
return $root1;
}
$mergedNode = new TreeNode($root1->val + $root2->val);
$mergedNode->left = mergeTrees($root1->left, $root2->left);
$mergedNode->right = mergeTrees($root1->right, $root2->right);
return $mergedNode;
}Ставь 👍 и забирай 📚 Базу знаний
