– | – |
---|---|
题目描述 | 请实现一个函数,用来判断一个二叉树是不是对称的。 |
注意 | 如果一个二叉树通次二叉树的镜像是相同的,则定义其实对称的。 |
题目:
/* 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);
}
};