题目描述
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
解题思路:定义一种遍历方式,先遍历父结点,然后遍历右结点,然后遍历左结点;如果为对称二叉树,则与前序遍历相同。
注意点:对于一个结点如果其没有子结点,应该将其子结点位置特殊处理,例如用NULL表示
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 //自定义一种前序对称遍历(根->右->左),若对称则与前序遍历相同,为了避免节点值都相同情况加入NULL 14 bool isSymmetrical(TreeNode *pRoot1, TreeNode *pRoot2) 15 { 16 if(pRoot1 == NULL && pRoot2 == NULL) 17 { 18 return true; 19 } 20 if(pRoot1 == NULL || pRoot2 == NULL) 21 { 22 return false; 23 } 24 if(pRoot1->val != pRoot2->val) 25 { 26 return false; 27 } 28 return isSymmetrical(pRoot1->left,pRoot2->right) && isSymmetrical(pRoot1->right,pRoot2->left);//注意此处处理 29 } 30 bool isSymmetrical(TreeNode* pRoot) 31 { 32 return isSymmetrical(pRoot,pRoot); 33 } 34 };