LeetCode刷题笔记8
101. 对称二叉树
题目描述
给定一个二叉树,检查它是否是镜像对称的。
代码
python
递归解法
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if root==None:
return True
if root.left==None and root.right==None:
return True
def helper(left,right):
if left==None and right==None:
return True
if left==None or right==None:
return False
if left.val!=right.val:
return False
return helper(left.left,right.right) and helper(left.right,right.left)
return helper(root.left,root.right)
非递归解法
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if root==None:
return True
if root.left==None and root.right==None:
return True
if root.left==None or root.right==None:
return False
left=[root.left]
right=[root.right]
while(len(left) and len(right)):
l=left.pop(0)
r=right.pop(0)
if l.val!=r.val:
return False
if l.left and r.right:
left.append(l.left)
right.append(r.right)
elif l.left or r.right:
return False
if l.right and r.left:
left.append(l.right)
right.append(r.left)
elif l.right or r.left:
return False
if len(left)==0 and len(right)==0:
return True
else:
return False
C++
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool helper(TreeNode* left,TreeNode* right){
if (left==NULL && right==NULL) return true;
if (left==NULL || right==NULL) return false;
if (left->val!=right->val) return false;
return helper(left->left,right->right) && helper(left->right,right->left);
}
bool isSymmetric(TreeNode* root) {
if (root==NULL) return true;
return helper(root->left,root->right);
}
};
java
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean helper(TreeNode left,TreeNode right){
if (left==null && right==null) return true;
if (left==null || right==null) return false;
if (left.val!=right.val) return false;
return helper(left.left,right.right) && helper(left.right,right.left);
}
public boolean isSymmetric(TreeNode root) {
if (root==null) return true;
return helper(root.left,root.right);
}
}