1. 程式人生 > 實用技巧 >劍指offer28.對稱的二叉樹

劍指offer28.對稱的二叉樹

解題思路:首先,將原二叉樹進行映象處理。得到一個映象二叉樹:(映象二叉樹的求解見https://www.cnblogs.com/sbb-first-blog/p/13289799.html)。

     其次,對映象後的二叉樹進行比較,如果二者相同則返回true,否則返回false。

終止條件:1、如果映象和原二叉樹有且只有一個為null則判定為false。

     2、如果映象和元二叉樹節點數不一致,則返回false.

 1 /**
 2  * Definition for a binary tree node.
 3  * struct TreeNode {
 4  *     int val;
5 * struct TreeNode *left; 6 * struct TreeNode *right; 7 * }; 8 */ 9 /*遞迴得到二叉樹的映象 10 並將得到的映象與原二叉樹進行比較*/ 11 //二叉樹結點對比 12 bool isEqual(struct TreeNode* first, struct TreeNode* sc){ 13 if(first==0 && sc==0) return true; 14 if(first==0 || sc==0) return false; 15 if
(first->val!=sc->val) return false; 16 return isEqual(first->right, sc->right) && isEqual(first->left,sc->left); 17 } 18 //二叉樹映象 19 struct TreeNode* mirrotree(struct TreeNode* root) 20 { 21 if(root==0) return NULL; 22 struct TreeNode* Node=(struct TreeNode*)malloc
(sizeof(struct TreeNode)); 23 Node->val=root->val; 24 Node->right=mirrotree(root->left); 25 Node->left=mirrotree(root->right); 26 return Node; 27 } 28 bool isSymmetric(struct TreeNode* root){ 29 // struct TreeNode* Node1=TreeClone(root); 30 // struct TreeNode* Node2=mirrotree(Node1); 31 struct TreeNode* Node2=mirrotree(root); 32 return isEqual(root,Node2); 33 }