對稱的二叉樹(劍指offer+鏡面對稱+遞迴)
阿新 • • 發佈:2019-01-29
對稱的二叉樹
- 參與人數:904時間限制:1秒空間限制:32768K
- 通過比例:28.19%
- 最佳記錄:0 ms|8552K
題目描述
請實現一個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。思路:既然是鏡面對稱,我們可以通過遞迴求解,判斷每個相應的子樹是否對稱就好了,
主要注意搞清楚左右就可以了。簡單模擬題。
/** 題目描述 請實現一個函式,用來判斷一顆二叉樹是不是對稱的。 注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。 */ #include<cstdio> using namespace std; struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; class Solution { public: bool isSymmetrical(TreeNode* pRoot) { if(pRoot==NULL) return true; TreeNode* pRight=pRoot->right; TreeNode* pLeft=pRoot->left; if(pRight==NULL && pLeft==NULL) return true; if(pRight==NULL || pLeft==NULL) return false;//不要忘了 return isJudge(pRight,pLeft); } bool isJudge(TreeNode* pLroot,TreeNode* pRroot)//遞迴讓它自己比較左右子樹,注意退出的條件 { if(pLroot==NULL && pRroot==NULL) return true; if(pLroot==NULL || pRroot==NULL) return false;//不要忘了 if(pLroot->val!=pRroot->val) return false; TreeNode* pL1=pLroot->left; TreeNode* pL2=pLroot->right; TreeNode* pR1=pRroot->left; TreeNode* pR2=pRroot->right; return isJudge(pL1,pR2) && isJudge(pL2,pR1); } }; int main() { return 0; } /* 測試用例: {} 對應輸出應該為: true */