101:Symmetric Tree【树】【DFS】

题目链接:click~

:解法1:队列

/*题意:判断一颗二叉树是否是自己的镜像*/

/**
 *思路:   只要保证根结点下的左子树的每一层是右子树的镜像,此树是自己的镜像
 *         我们利用两个队列分别记录左右子树的每一层的结点。BFS遍历左右子树时
 *      为方便比较左右结点,将空结点也加入到队列中。对于结点的判断,有以下情
 *      况:
 *         1)两边结点都为空,忽略
 *         2)其中一边的结点为空,返回false
 *         3)两边均不为空,但值不同,返回false
 *         4)将左边结点的子结点按从左到右的顺序加入左边的队尾,将右边的子结点
 *           按从右到左的顺序加入到右边的队尾。
 *         最后判断两个队列是否都为空
 */

class Solution {
public:
    bool isSymmetric(TreeNode *root) {
        if(root == NULL) return true;
        queue<TreeNode *> left, right;
        left.push(root->left);  //记录左子树中每一层的结点
        right.push(root->right);//记录右子树中每一层的结点
        while(!left.empty() && !right.empty()) {
            TreeNode *l = left.front();
            left.pop();
            TreeNode *r = right.front();
            right.pop();
            if(l == NULL && r == NULL) continue;       //情况1
            if(l == NULL || r == NULL) return false;   //情况2

            if(l->val != r->val) return false;         //情况3
            left.push(l->left);    left.push(l->right);//情况4
            right.push(r->right);  right.push(r->left);
        }
        if(left.empty() && right.empty()) return true;
        else return false;
    }
};

解法2:DFS

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值