//递归的解法
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root == NULL)
return true;
TreeNode *pleft = root->left;
TreeNode *pright = root->right;
return isequal(pleft,pright);
}
bool isequal(TreeNode *pleft, TreeNode *pright){
if(pleft == NULL && pright == NULL )
return true;
if(pleft == NULL && pright != NULL)
return false;
if(pleft != NULL && pright == NULL)
return false;
if(pleft->val == pright->val)
return isequal(pleft->left,pright->right) && isequal(pleft->right,pright->left);
else{
return false;
}
}
};
//循环的方法 很悲哀 不太会用C++ STL模板中的stack 和pair 所以用了python
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def isSymmetric(self, root): """ :type root: TreeNode :rtype: bool """ if root is None: return True stack = [[root.left,root.right]] while len(stack) > 0: pair = stack.pop() pleft = pair[0] pright = pair[1] if pleft is None and pright is None: continue if pleft is None or pright is None: return False if pleft.val == pright.val: stack.append([pleft.left,pright.right]) stack.append([pleft.right,pright.left]) else: return False return True