思路:要判斷一顆二叉樹是否對稱,要判斷一下幾點,可以用遞歸來實現:
- 判斷一顆二叉樹是不是對稱的,等價於判斷其左右子樹是不是鏡像對稱的
- 判斷鏡對稱像即判斷對稱的位置上的元素是不是相等
- 兩個節點A和B對稱等價於:
- 這兩個節點上存儲的值相等
- 節點A的左子樹節點和節點B的右子樹上的節點是對稱的
- 節點A的右子樹節點和節點A的左子樹上的節點是對稱的
- 看代碼:
-
class Solution { public: bool isTreeSymmertic(TreeNode *pHead1,TreeNode *pHead2) { if(pHead1==NULL&&pHead2==NULL) return true;//左右子樹都為空,肯定是對稱的 if(pHead1==NULL) return false;//一顆為空 if(pHead2==NULL) return false; //判斷當前值左右是否相等,判斷左子樹的左節點和右子樹的右節點,判斷左子樹的右節點和右子樹的左節點是否相等,三者缺一不可,一直遞歸 return pHead1->val==pHead2->val&&isTreeSymmertic(pHead1->left,pHead2->right)&&isTreeSymmertic(pHead1->right,pHead2->left); } bool isSymmetrical(TreeNode* pRoot) { if(pRoot==NULL) return true;//本身就為空肯定是對稱的 return isTreeSymmertic(pRoot->left,pRoot->right);//判斷左右子樹 } };