39. 对称的二叉树

 和上一题差不多,上一题是变成镜像,这一题是判断是不是镜像。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        if(root == NULL)  return false;
        return dfs(root->left,root->right);
    }
    
    bool dfs(TreeNode*p,TreeNode*q){
        if(!p || !q) return !p && !q;//判断左右子树是不是空。如果都为空,是镜像。一个空,一个不空,false。
        if(p->val == q->val) //左右子树值相等,再进行递归
        {
            return  dfs(p->left, q->right) && dfs(p->right, q->left);
        }
        else{
            return false;
        }
        //上面的if else 可以直接写成如下
        // return p->val == q->val && dfs(p->left, q->right) && dfs(p->right, q->left);
    }
};

 if (!p || !q) return !p && !q;

不仅可以判断p,q同时为空,(返回true),还能判断一个空一个不空,这样也是不对称的,会返回false。

带女朋友搬家新家条件不好,累到女朋友了,让女朋友受苦了,特此明志:每天学习,明年这个时候(20190812)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
原文地址:https://www.cnblogs.com/make-big-money/p/12307066.html