劍指offer-對稱的二叉樹

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

思路:針對前序遍歷定義一種對稱的前序遍歷算法:先遍歷父節點,再遍歷它的右子節點,最後遍歷它的左子節點

python:

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def isSymmetrical(self, pRoot):
        # write code here
        return self.isSymmetrical_2(pRoot,pRoot)

    def isSymmetrical_2(self,pRoot1,pRoot2):
    	if pRoot1==None and pRoot2==None:
    		return True
    	if pRoot1==None or pRoot2==None:
    		return False
    	if pRoot1.val != pRoot2.val:
    		return False
    	return self.isSymmetrical_2(pRoot1.left,pRoot2.right) 

c++:

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 == nullptr && pRoot2 == nullptr)
		    return true;
	    if (pRoot1 == nullptr || pRoot2 == nullptr)
		    return false;
		if (pRoot1->val != pRoot2->val)
			return false;
		return isSymmetrical(pRoot1->left, pRoot2->right);
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章