leetcode binaria simétrica 101

árbol binario? Simetría!

Título:
Dado un árbol binario, comprobar si es simétrica

Ejemplos:
binario [1,2,2,3,4,4,3] simétrico
- 1.
- / - \
-2 ---- 2
- / - \ - / - \
34--43

tema de análisis

  • simétrico binario
    aproximadamente 1. subárboles ==> la misma configuración que
    los subárboles izquierdo y derecho 2 ==> correspondiente a la misma ubicación de lo digital
Binaria simétrica ==> la misma izquierda y derecha subárboles

Para el actualraíz

subárbol izquierdo de la izquierda subárbol derecho subárbol derecho subárbol mismo
subárbol derecho del subárbol izquierdo del subárbol izquierdo subárbol derecho de la misma

que
recursividad! !
La determinación de si cada nodo es el mismo para los subárboles izquierdo y derecho

Ideas de resolución de problemas

función efecto
juez (TreeNode a, TreeNode b) Determinar si los mismos dos árbol binario

proceso:

  • Dos árboles de raíces diferentes valores
    ==> false retorno

  • La raíz de dos árboles sin haber izquierda y derecha subárboles (descrito recorrido recursivo a un nodo hoja)
    ==> retorno a la verdadera

  • Dos árboles de raíz de los subárboles izquierdo y derecho están presentes
    ==>
    subárbol derecho del subárbol izquierdo - subárbol derecho del subárbol izquierdo misma
    misma subárbol derecho subárbol derecho - subárbol izquierdo del subárbol izquierdo

    == > vuelta verdad

  • Dos árboles de raíz de la estructura subárbol izquierda y derecha no se corresponde
    ==>
    la presencia de un subárbol izquierdo del árbol y el otro árbol justo ausencia subárbol
    y la presencia de otro árbol tiene un subárbol derecho del árbol subárbol izquierdo no existe

    ==> false retorno

  • Raíz de dos árboles a la izquierda y derecha subárboles están presentes, pero sin correspondencia estructural
    ==>
    presencia dejó subárbol de un árbol a otro subárbol derecho árbol correspondiente a la presencia de
    la presencia de un árbol a otro subárbol derecho del árbol correspondiente a la presencia del subárbol izquierdo

    ==> recursivamente determina si el correspondiente subárbol de la misma

Código es el siguiente

bool judge(TreeNode*a,TreeNode*b)
{
    if(a->val != b->val) return false;
    if(!a->right && !b->left && !a->left && !b->right) return true;     //递归遍历到叶子结点
    if(a->right && b->left&&a->left && b->right)
    {
        return (judge(a->right, b->left)&&judge(a->left, b->right));
    }
    if((a->right==NULL&& b->left)||(a->right&& b->left ==NULL) ||(a->left==NULL&& b->right)
    ||(a->left&& b->right ==NULL) ) return false;                      //a b树子树结构不对应
    if (a->right && b->left ) return judge(a->right, b->left);    //a树的右子树且b树的左子树存在
    if (a->left && b->right) return judge(a->left, b->right);     //a树的左子树且b树的右子树存在
    return false;
}
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(!root) return true;
        if(!root -> left && !root -> right) return true; 
        if(root -> left && root -> right) 
        return judge(root->left, root->right);
        else return false;
    }
};
Publicado 34 artículos originales · ganado elogios 0 · Vistas 581

Supongo que te gusta

Origin blog.csdn.net/Luyoom/article/details/104139578
Recomendado
Clasificación