– | – |
---|---|
題目描述 | 請實現一個函數,用來判斷一個二叉樹是不是對稱的。 |
注意 | 如果一個二叉樹通次二叉樹的鏡像是相同的,則定義其實對稱的。 |
題目:
/*
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);
}
};