一、題目鏈接
https://leetcode-cn.com/problems/symmetric-tree/
二、題目思路
給你一個二叉樹的根節點?root
?, 檢查它是否軸對稱的思路:
1.將該樹的左子樹和右子樹,當做兩棵樹,調用 判斷兩棵樹是否對稱相等的函數
2.判斷兩顆樹是否對稱相等的函數,其實就是先判斷兩顆樹的根結點是否相等,再將一棵樹的左孩子結點和另一棵樹的右子樹結點比較相等,將一棵樹的右子樹,和另一顆樹的左子樹比較相等
3.每個結點的左右孩子結點都要綜合判斷,這樣就達到了是否對稱的判斷
三、題解代碼
// 判斷兩顆樹是否對稱相等的函數
//其實就是將一棵樹的左孩子結點和另一棵樹的右子樹結點比較相等
//將一棵樹的右子樹,和另一顆樹的左子樹比較相等
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {//如果兩顆樹的根結點都是空,說明是相同的結點if(p==NULL&&q==NULL)return true;//如果兩棵樹的根結點只是其中之一為空,說明不是相同的結點if(p==NULL||q==NULL) return false;//如果兩棵樹的根結點都存在,但是值不相等,說明也不是相同的結點if(p->val!=q->val)return false;//每個結點的左右孩子結點都要綜合判斷//將一棵樹的左子樹,和另一顆樹的右子樹比較//將一棵樹的右子樹,和另一顆樹的左子樹比較//這樣就達到了是否對稱的判斷return isSameTree(p->left,q->right)&&isSameTree(p->right,q->left);
}bool isSymmetric(struct TreeNode* root) {//將該樹的左子樹和右子樹,當做兩棵樹,調用 判斷兩棵樹是否對稱相等的函數return isSameTree(root->left,root->right);
}