劍指offer:對稱的二叉樹

題目描述:函數

請實現一個函數,用來判斷一顆二叉樹是否是對稱的。注意,若是一個二叉樹同此二叉樹的鏡像是一樣的,定義其爲對稱的。spa

 

思路分析:code

二叉樹的鏡像就是左右相反,對稱二叉樹即鏡像相等。利用一個遞歸函數,輸入爲兩顆樹,若同爲空,則對稱。若一棵爲空,一棵不爲空,則不對稱。若兩者的指不相等,則不對稱,若樹1的左子樹和樹2的右子樹相等且樹1的右子樹和樹2的左子樹相等,則對稱。blog

 

代碼:遞歸

 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 symmetric(TreeNode* pRoot1, TreeNode* pRoot2)
14     {
15         if(pRoot1 == nullptr && pRoot2 == nullptr)
16             return true;
17         if(pRoot1 == nullptr || pRoot2 == nullptr)
18             return false;
19         if(pRoot1->val != pRoot2->val)
20             return false;
21         return (symmetric(pRoot1->left, pRoot2->right) && symmetric(pRoot2->left, pRoot1->right));
22         
23     }
24     bool isSymmetrical(TreeNode* pRoot)
25     {
26         if(pRoot == nullptr)
27             return true;
28         return symmetric(pRoot, pRoot);
29     }
30 
31 };
相關文章
相關標籤/搜索