题目描述:
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
分析:
递归解法。
如果对称点一个有一边为空一边不为空,或者是对称点数值不一样,该二叉树就不是对称的。
代码:
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 if(pRoot == NULL) return true; 15 return isMirror(pRoot->left, pRoot->right); 16 } 17 bool isMirror(TreeNode* p1, TreeNode* p2) { 18 if(p1 == NULL && p2 == NULL) return true; 19 if(p1 == NULL || p2 == NULL) return false; 20 if(p1->val != p2->val) return false; 21 return isMirror(p1->left, p2->right) && isMirror(p1->right, p2->left); 22 } 23 };