(劍指Offer)面試題59:對稱的二叉樹


題目:

請實現一個函數,用來判斷一顆二叉樹是不是對稱的。

注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其為對稱的。

思路:

對於一棵二叉樹,從根結點開始遍歷,

如果左右子結點有一個為NULL,那么肯定不是對稱二叉樹;

如果左右子結點均不為空,但不相等,那么肯定不是對稱二叉樹;

如果左右子結點均不為空且相等,那么

遍歷左子樹,遍歷順序為:當前結點,左子樹,右子樹;

遍歷右子樹,遍歷順序為:當前結點,右子樹,左子樹;

如果遍歷左子樹的序列和遍歷右子樹的序列一樣,那么該二叉樹為對稱的二叉樹。(遞歸實現)

另外一種角度考慮:

把每個結點的左右子樹分別看成一棵獨立的二叉樹,那么判斷該二叉樹是否為對稱的,只需判斷左右子樹是否互為鏡像即可。

在線測試OJ:

http://www.nowcoder.com/books/coding-interviews/ff05d44dfdb04e1d83bdbdab320efbcb?rp=3

AC代碼:

/*
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 isSymetrical(pRoot,pRoot);
    }

    bool isSymetrical(TreeNode* pLeft,TreeNode* pRight){
        if(pLeft==NULL && pRight==NULL)
            return true;
        if(pLeft==NULL || pRight==NULL)
            return false;
        if(pLeft->val!=pRight->val)
            return false;
        return isSymetrical(pLeft->left,pRight->right) && isSymetrical(pLeft->right,pRight->left);
    }
};


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM