劍指offer(C++)——對稱的二叉樹
阿新 • • 發佈:2019-02-20
題目描述
請實現一個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。
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) { return isSymmetrical(pRoot, pRoot); } bool isSymmetrical(TreeNode* pRoot1, TreeNode* pRoot2) { if (pRoot1 == NULL&&pRoot2 == NULL) return true; if (pRoot1 == NULL || pRoot2 == NULL) return false; if (pRoot1->val != pRoot2->val) return false; return isSymmetrical(pRoot1->left, pRoot2->right) && isSymmetrical(pRoot1->right, pRoot2->left); } };