对称二叉树的判断

这道题没什么特别的,仅此纪念新学期写的第一题。

题目如下:http://链接:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xn7ihv/

看到树的题,两个方向,一递归,二迭代(多用队列),话不多说上代码

递归:

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

迭代:

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

其实这题和前面计算二叉树的最大深度非常相似,思路基本是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值