天天看點

《劍指offer》對稱的二叉樹

【 聲明:版權所有,轉載請标明出處,請勿用于商業用途。  聯系信箱:[email protected]】

題目連結:http://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb?rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

題目描述

請實作一個函數,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其為對稱的。

思路

從根節點開始,遞歸判斷其子樹的對稱性

/*
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 check(pRoot,pRoot);
		}
		bool check(TreeNode *pLeft,TreeNode *pRight)
		{
			if(pLeft==nullptr && pRight==nullptr)
				return true;
			if(pLeft==nullptr || pRight==nullptr)
				return false;
			if(pLeft->val != pRight->val)
				return false;
			return check(pLeft->left,pRight->right)&&check(pLeft->right,pRight->left);
		}

};