LeetCode-617-Combine árbol binario (simple)


1. Descripción

Dados dos árboles binarios, imagina que cuando superpones uno de ellos sobre el otro, algunos nodos de los dos árboles binarios se superpondrán.

Necesita fusionarlos en un nuevo árbol binario. La regla de fusión es que si dos nodos se superponen, sus valores se agregan como el nuevo valor después de que se fusiona el nodo; de lo contrario, el nodo que no es NULL se utilizará directamente como nodo del nuevo árbol binario.

2. Ejemplo

Entrada:
  Árbol 1 Árbol 2
       1 2
      / \ / \
    3 2 1 3
   / \ \
  5 4 7

Salida:
árbol combinado:
           3
         / \
       4 5
     / \ \
   5 4 7

3. Análisis

La definición de árbol binario se realiza de forma recursiva, por lo que la operación en él también se realiza de forma recursiva.

En el ejemplo, después de fusionar el nodo raíz "1" del árbol 1 y el nodo raíz "2" del árbol 2, se obtiene el nodo raíz "3" del árbol combinado, que es la raíz "1" del árbol 1 más la raíz del árbol 2 " 2 ".

Luego procese el subárbol izquierdo del nodo raíz "1" del Árbol 1 y el subárbol izquierdo del nodo raíz "2" del Árbol 2;
finalmente procese el subárbol derecho del nodo raíz "1" del Árbol 1 y el nodo raíz "2" del Árbol 2 "El subárbol derecho.

Sin embargo, debe tenerse en cuenta que si el nodo raíz de dos subárboles está vacío, vuelve vacío;
si un nodo de un determinado subárbol está vacío, devuelve el nodo correspondiente del otro subárbol; de lo
contrario, es necesario cambiar el valor del nodo raíz. Agregue, coloque el resultado de la adición en un subárbol (o cree un árbol nuevo), realice de forma recursiva el mismo procesamiento en los subárboles izquierdo y derecho.

4. Código

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    
    
    public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
    
    
    	// 如果两棵子树的根节点均为空,则返回空
        if(t1 == null && t2 == null)
            return null;
        // 若某棵子树的根节点为空,则返回不为空的根节点
        else if(t1 == null)
            return t2;
        else if(t2 == null)
            return t1;
        // 否则,两棵子树的根节点均不为空,则将值相加,放到 Tree 1 树中
        //递归地对左子树和右子树进行同样的处理
        else
        {
    
    
            t1.val += t2.val;
            t1.left = mergeTrees(t1.left, t2.left);
            t1.right = mergeTrees(t1.right, t2.right);
        }
        return t1;
    }
}

5. Verificación

Inserte la descripción de la imagen aquí

6. Fuente

  1. LeeCode 617. Fusionar árboles binarios
    Fuente: LeetCode
    Enlace: https://leetcode-cn.com/problems/merge-two-binary-trees Los
    derechos de autor son propiedad de LeetCode Network.

Supongo que te gusta

Origin blog.csdn.net/PursueLuo/article/details/108746273
Recomendado
Clasificación