剑指offer---对称的二叉树
题目:对称的二叉树
要求:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 }; 10 */ 11 class Solution { 12 public: 13 bool isSymmetrical(TreeNode* pRoot) 14 { 15 16 } 17 18 };
解题代码:
1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 }; 10 */ 11 class Solution { 12 public: 13 bool isSymmetrical(TreeNode* pRoot) 14 { 15 if(pRoot == nullptr) 16 return true; 17 return comRoot(pRoot->left, pRoot->right); 18 } 19 private: 20 bool comRoot(TreeNode* proot1, TreeNode* proot2){ 21 if(proot1 == nullptr && proot2 == nullptr) 22 return true; 23 if(proot1 == nullptr || proot2 == nullptr) 24 return false; 25 if(proot1->val != proot2->val) 26 return false; 27 return comRoot(proot1->left, proot2->right) && comRoot(proot1->right, proot2->left); 28 } 29 };