判斷二叉樹對稱與否

題目描述 請實現一個函數,用來判斷一個二叉樹是不是對稱的。
注意 如果一個二叉樹通次二叉樹的鏡像是相同的,則定義其實對稱的。

題目:

/*
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)
    {
    
    }
};

判斷一個二叉樹是否是對稱的,我們可以利用遞歸的方法來進行判斷
我們可以從根部節點來進行判斷
1.判斷左右兩孩子結點均不爲空,則判斷兩值是否相等,相等,繼續向下判斷。不相等,直接返回 false
2.判斷左右倆孩子均爲空,返回 true
3.判斷左右倆孩子只有一個孩子爲空,另一個不爲空,返回 false


通過代碼:

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    bool decision(TreeNode* left, TreeNode* right)
    {
        //左右倆孩子結點均不爲空
        if(left != NULL && right != NULL)
        {
            //判斷左孩子和右孩子值是否相等
            if(left->val != right->val)
                return false;
            return decision(left->left, right->right) && decision(left->right, right->left);
        }
        //左右孩子結點均爲空
        if(left == NULL && right == NULL)
            return true;
        //其中一個爲空
        if(left != NULL && right == NULL)
            return false;
        if(left == NULL && right != NULL)
            return false;
    }
    
    bool isSymmetrical(TreeNode* pRoot)
    {
        //當二叉樹爲空樹的時候
        if(!pRoot)
            return true;
        //當二叉樹不爲空樹的時候
        return decision(pRoot->left, pRoot->right);
    }

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