OJ链接👇
对称二叉树
这道题思路很重要,首先我们要选择两个在同一层的对称节点,这两个节点分别在根节点的两侧,我们设这两个对称的节点为left和rright。
在当前层的分为四种情况:
- left和right都不为空,此时需要比较left和right的值的大小,如果值不相同那么整棵二叉树就不是对称的了,如果相同就需要看下一层是否是堆成的
- left和right有一个为空另一个不为空,这个二叉树肯定不是对称的
- left和right都为空,当前节点是对称的
在整个判断过程中,判断的对称只能判断当前节点是对称的,而判断不对称就说明整棵树都不对称。
进入下一层时由于当前层的left和right是对称的,所以下一层也需要对称!
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
bool fun(TreeNode* l,TreeNode*r)
{
if(l==nullptr && r==nullptr)
{
return true;
}
else if(l!=nullptr && r!=nullptr)
{
if(l->val!=r->val)
return false;
else{
return fun(l->left,r->right)&&fun(l->right,r->left);
}
}
else
{
return false;
}
}
bool isSymmetric(TreeNode* root) {
return fun(root->left,root->right);
}
};