Leetcode-101. Symmetric Tree

来源:互联网 发布:视频采集源码 编辑:程序博客网 时间:2024/06/06 19:49

解题思路:返回值为bool,即是判断某个条件是否满足的题目。其中左子树和右子树对称的条件:

·       两个节点值相等,或者都为空

·       左节点的左子树和右节点的右子树对称

·       左节点的右子树和右节点的左子树对称

则不满足以上条件的情况应返回false.


解法一:

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


解法二:

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

注:

要比较的两边有三种对称情况:

1.两边皆为空

2.两边皆有一个节点

3.两边皆有两个节点





0 0
原创粉丝点击