题解 | #对称的二叉树#

对称的二叉树

https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb

方法一:递归

一个对称的二叉树,两个不同方向的前序遍历一定是相同的。通过递归进行两个方向的遍历,终止条件为:当两个节点只有一个为空,或者两个节点的值不相同,则二叉树不对称。

时间复杂度:o(n)

空间复杂度:o(n)。递归栈的深度

class Solution {
  public:
    bool isSymmetrical(TreeNode* root1, TreeNode* root2) {
        //节点都为空时,返回true
        if (root1 == nullptr && root2 == nullptr)
            return true;

        if (root1 == nullptr || root2 == nullptr || root1->val != root2->val)
            return false;
        
        return (isSymmetrical(root1->left, root2->right) &&
                isSymmetrical(root1->right, root2->left));
    }
    bool isSymmetrical(TreeNode* pRoot) {
        return isSymmetrical(pRoot, pRoot);
    }
};

方法二:辅助队列

一个对称的二叉树,两个不同方向的层间遍历一定是相同的。

通过创建两个辅助队列,对二叉树进行不同方向的层间遍历,进行比较。

时间复杂度:o(n)

空间复杂度:o(n)。两个辅助队列

class Solution {
  public:
    bool isSymmetrical(TreeNode* pRoot) {
        //空树为对称的
        if (pRoot == NULL)
            return true;
        //辅助队列用于从两边层次遍历
        queue<TreeNode*> q1;
        queue<TreeNode*> q2;
        q1.push(pRoot->left);
        q2.push(pRoot->right);
        while (!q1.empty() && !q2.empty()) {
            //分别从左边和右边弹出节点
            TreeNode* left = q1.front();
            q1.pop();
            TreeNode* right = q2.front();
            q2.pop();
            //都为空暂时对称
            if (left == NULL && right == NULL)
                continue;
            //某一个为空或者数字不相等则不对称
            if (left == NULL || right == NULL || left->val != right->val)
                return false;
            //从左往右加入队列
            q1.push(left->left);
            q1.push(left->right);
            //从右往左加入队列
            q2.push(right->right);
            q2.push(right->left);
        }
        //都检验完都是对称的
        return true;
    }
};

刷题题解(c++) 文章被收录于专栏

算法题题解(c++)

全部评论

相关推荐

抱抱碍事梨a:三点建议,第一点是建议再做一个项目,把自我介绍部分顶了,第二点是中南大学加黑加粗,第三点是建议加v详细交流
点赞 评论 收藏
分享
03-30 21:02
已编辑
武汉大学 Java
ALEX_BLX:虽然说聊天记录不可信,不过这个趋势确实如此但我觉得也要想到一点就是卷后端的人里真正有“料”的人又有多少,我说的这个料都不是说一定要到大佬那种级别,而是就一个正常的水平。即使是现在也有很多人是跟风转码的,2-3个月速成后端技术栈的人数不胜数,但今时不同往日没可能靠速成进大厂了。这种情况就跟考研一样,你能上考场就已经打败一半的人了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务