Leetcode 101 对称二叉树 C++

方法一:递归法
思路: 对某两个对称节点n1(左),n2(右),我们只需要比较n1的左节点和n2的右节点,n1的右节点和n2的左节点,是否相等即可。然后一直递归调用即可。

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(!root) return true;
        return helper(root->left,root->right);
    }
    bool helper(TreeNode* left,TreeNode* right)
    {
        if(!left&&!right) return true;
        if((!left&&right)||(left&&!right)||(left->val!=right->val)) return false;
        return helper(left->left,right->right)&&helper(left->right,right->left);
    }
};

方法二:迭代法
思路:借助两个队列queue来分别存储root的左右子树中的以每个节点为根的子树,然后按照对称的顺序逐个放入队列末尾,并从队列前取出一个进行比较。


class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        queue<TreeNode*> q1,q2;
        if(!root) return true;
        q1.push(root->left);
        q2.push(root->right);
        while(!q1.empty()&&!q2.empty())
        {
            TreeNode* node1=q1.front();q1.pop();
            TreeNode* node2=q2.front();q2.pop();
            if(!node1&&!node2) continue;
            if((!node1&&node2)||(node1&&!node2)||(node1->val!=node2->val)) return false;
            q1.push(node1->left);
            q1.push(node1->right);
            q2.push(node2->right);
            q2.push(node2->left);
        }
        return true;
    
    }
    
};

猜你喜欢

转载自blog.csdn.net/qq_43387999/article/details/87856985