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.两边皆有两个节点
· 两个节点值相等,或者都为空
· 左节点的左子树和右节点的右子树对称
· 左节点的右子树和右节点的左子树对称
则不满足以上条件的情况应返回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.两边皆有两个节点
相关文章推荐
- The Solution to Leetcode 101 Symmetric Tree
- [leetcode]101.Symmetric Tree
- [LeetCode]题解(python):101-Symmetric Tree
- (LeetCode 101) Symmetric Tree
- leetcode(24).101. Symmetric Tree
- LeetCode 101. Symmetric Tree
- Leetcode-101. Symmetric Tree
- leetcode——101——Symmetric Tree
- LeetCode101 Symmetric Tree
- LeetCode 101 Symmetric Tree
- Leetcode#101. Symmetric Tree(对称树)
- leetcode:101 Symmetric Tree-每日编程第二十题
- LeetCode: Symmetric Tree [101]
- 【LeetCode-101】 Symmetric Tree(C++)
- leetcode-101-Symmetric Tree
- leetcode 101 Symmetric Tree
- [Leetcode 7] 101 Symmetric Tree
- leetcode 101 Symmetric Tree
- LeetCode-101-Symmetric Tree(判断是否为对称树)
- LeetCode_101 Symmetric Tree