今日份题目:
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
1 / \ 2 2 / \ / \ 3 4 4 3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
1 / \ 2 2 \ \ 3 3
示例1
输入:root = [1,2,2,3,4,4,3] 输出:true
示例2
输入:root = [1,2,2,null,3,null,3] 输出:false
提示
0 <= 节点个数 <= 1000
题目思路
树对称,可以通过左右交叉对此树的子结构判断是否对称。所以不同于判断是否为子结构的唯一地方就是是判断A的左子树和B的右子树是否相同以及A的右子树是否和A的左子树相同。判断子结构是左左判断,右右判断。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution
{
public:
bool isTheTree(TreeNode *A, TreeNode *B)
{
if(A==NULL&&B==NULL) return true;
if((A==NULL&&B!=NULL)||(B==NULL&&A!=NULL)) return false;
if(A->val!=B->val) return false;
return isTheTree(A->left,B->right)&&isTheTree(A->right,B->left);
}
bool isSymmetric(TreeNode* root)
{
return isTheTree(root,root);
}
};
提交结果
欢迎大家在评论区讨论,如有不懂的代码部分,欢迎在评论区留言!