0. 题目
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
For example, this binary tree [1,2,2,3,4,4,3] is symmetric:
1. c++版本
bool isSameTree(TreeNode* left, TreeNode* right){
if (!left && !right) return true;
if (!left || !right) return false;
if (left->val != right->val) return false;
return isSameTree(left->left, right->right) && isSameTree(left->right, right->left);
}
bool isSymmetric(TreeNode* root) {
return isSameTree(root, root);
}
版本2,对二叉树进行两次排序,第1次: root->left->right. 第2次: root->right->left; 然后对比结果
void preOrder(TreeNode* root, vector<int>& result, int flag){
if(root){
result.push_back(root->val);
if (flag == 0) {
preOrder(root->left, result, flag);
preOrder(root->right, result, flag);
}
else {
preOrder(root->right, result, flag);
preOrder(root->left, result, flag);
}
}
else
result.push_back(INT_MIN);
}
bool isSymmetric(TreeNode* root) {
vector<int> result1, result2;
preOrder(root, result1, 0);
preOrder(root, result2, 1);
return (result1 == result2);
}
2. python版本
def preOrder(self, root, result, flag):
if root:
result.append(root.val)
if flag == 0:
self.preOrder(root.left, result, flag)
self.preOrder(root.right, result, flag)
else:
self.preOrder(root.right, result, flag)
self.preOrder(root.left, result, flag)
else:
result.append(2147483647)
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
result1, result2 = [], []
self.preOrder(root, result1, 0)
self.preOrder(root, result2, 1)
if result1 == result2:
return True
else:
return False
方法2, 使用递归
class Solution(object):
def isMirror(self, p, q):
"""
"""
if not p and not q:
return True
if not p or not q:
return False
if p.val != q.val:
return False
return self.isMirror(p.left, q.right) and self.isMirror(p.right, q.left)
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
return self.isMirror(root, root);
网友评论