非最优解,仅学习记录。
算法思路:
递归:
再另写一个方法,将一颗二叉树的左右子树分开当作两个树比较,双指针分别镜像移动,左边往左右边往右,左边往右右边往左。
判断情况两大类:空和不空
空:左右都空-t,左右有一个空-f
不空:值相等-t
/**
* 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 symmetric(TreeNode* left,TreeNode* right) {
//空的情况判断
if(left==nullptr && right==nullptr){
return true;
}else
if(left==nullptr || right==nullptr){
//两方只有一方不为null
//条件可以这么写的前提是前面已经排除了两个都是空的情况。
return false;
}else
//非空的情况判断
if(left->val!=right->val){
return false;
}
//对称则继续比下一个对
return symmetric(left->left,right->right) &&
symmetric(left->right,right->left);
}
bool isSymmetric(TreeNode* root){
//若根结点为空则空树,直接返回t
if(root == nullptr){
return true;
}
return symmetric(root->left,root->right);
}
};