劍指offer28.對稱的二叉樹
阿新 • • 發佈:2020-07-12
解題思路:首先,將原二叉樹進行映象處理。得到一個映象二叉樹:(映象二叉樹的求解見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 }