Antepasado común del árbol binario (problema LCA)

Antepasado común del árbol binario

El ancestro común del enlace árbol binario-Likou

Contenido de la pregunta: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
ejemplo de entrada y salida:
Inserte la descripción de la imagen aquí

1. Implementación del código

Análisis de pensamiento:

  1. Si uno de ellos es la raíz del árbol, entonces debe ser el antepasado común;
  2. Luego hay tres casos: todos en el subárbol izquierdo, todos en el subárbol derecho, uno en el subárbol izquierdo y uno en el subárbol derecho;
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    
    
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    
    
        if(root == null){
    
    
            return null;
        }
        if(root == p || root == q){
    
    
            return root;
        }

        TreeNode l = lowestCommonAncestor(root.left,p,q);
        TreeNode r = lowestCommonAncestor(root.right,p,q);

        if(l != null && r != null){
    
    
            return root;
        }
        if(l != null){
    
    
            return l;
        }
        if(r != null){
    
    
            return r;
        }
        return null;

    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_45665172/article/details/113918318
Recomendado
Clasificación