Ofrecer para probar la seguridad de árbol binario simétrico

título Descripción

Por favor implementar una función, un árbol binario se utiliza para determinar no simétrica. Tenga en cuenta que si una imagen binaria es un árbol binario con esta misma definición que simétrica.

pensamiento

  1. El nodo raíz primero determina si los subárboles izquierdo y derecho están presentes o son NULL, no es falsa satisfecho, se satisface aún más si el árbol se divide en dos árboles, de acuerdo Is_Same determina si dos árboles simétrica.
  2. El uso no recursiva de la pila para presionar la izquierda y la derecha dos subárboles, si el mismo es en la misma, si es falso si es diferente

código

class Solution {
public:
    vector<int> left;
    vector<int> right;
    bool isSymmetrical(TreeNode* pRoot)
    {
        if(pRoot == NULL) return true;
        if(pRoot->left != NULL && pRoot->right != NULL)
            return Is_same(pRoot->left,pRoot->right);
        else if(pRoot->left == NULL && pRoot->right == NULL)
            return true;
        return false;
    }
    bool Is_same(TreeNode* pLeft,TreeNode* pRight)
    {
        if(pLeft == NULL && pRight == NULL)
            return true;
        if(pLeft!=NULL && pRight!=NULL)
        {
            if(pLeft->val == pRight->val)
            {
                if(Is_same(pLeft->left,pRight->right)&&Is_same(pLeft->right,pRight->left))
                    return true;
            }
        }
        return false;
    }
};

Segundo método:

链接:https://www.nowcoder.com/questionTerminal/ff05d44dfdb04e1d83bdbdab320efbcb?f=discussion
来源:牛客网

boolean isSymmetricalDFS(TreeNode pRoot)
    {
        if(pRoot == null) return true;
        Stack<TreeNode> s = new Stack<>();
        s.push(pRoot.left);
        s.push(pRoot.right);
        while(!s.empty()) {
            TreeNode right = s.pop();//成对取出
            TreeNode left = s.pop();
            if(left == null && right == null) continue;
            if(left == null || right == null) return false;
            if(left.val != right.val) return false;
            //成对插入
            s.push(left.left);
            s.push(right.right);
            s.push(left.right);
            s.push(right.left);
        }
        return true;
    }
Publicado 85 artículos originales · ganado elogios 0 · Vistas 399

Supongo que te gusta

Origin blog.csdn.net/weixin_38312163/article/details/104810528
Recomendado
Clasificación