剑指offer:对称二叉树

来源:互联网 发布:数据恢复高级技术 编辑:程序博客网 时间:2024/05/22 15:31

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
C++实现:

/*struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int x) :            val(x), left(NULL), right(NULL) {    }};*/class Solution {public:    bool isSymmetrical(TreeNode* pRoot)    {        if(pRoot==NULL) return true;        return comRoot(pRoot->left,pRoot->right);//采用递归的方法,分别判断左右子树是否相同    }    bool comRoot(TreeNode* left,TreeNode* right){        if(left==NULL) return right==NULL;        if(right==NULL) return false;        if(left->val!=right->val) return false;        return comRoot(left->right,right->left)&& comRoot(left->left,right->right);//判断左右子树是否相同    }};

python实现:

# -*- coding:utf-8 -*-# class TreeNode:#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution:    def isSymmetrical(self,pRoot):        # write code here        return self.isSymBT(pRoot,pRoot)    def isSymBT(self,tree1,tree2):        if tree1 == None and tree2 == None:            return True        if tree1 == None or tree2 == None:            return False        if tree1.val != tree2.val:            return False        return self.isSymBT(tree1.left,tree2.right) and self.isSymBT(tree1.right,tree2.left)