您的位置:首页 > 其它

Leetcode-101. Symmetric Tree

2017-02-03 23:22 495 查看
解题思路:返回值为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.两边皆有两个节点
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: