39.判断对称二叉树

1.迭代法

分析:队列层序遍历,一次出队列两个,按左左 ,右右,左右,右左,的顺序入队

cpp 复制代码
bool idsyme(TreeNode* root){
     if(root==NULL) return true;
     queue<TreeNode*> q;
     q.push(root->left);
     q.push(root->right);
     while (!q.empty()) {
     TreeNode* leftnode = q.front();
     q.pop();
     TreeNode* rightnode = q.front();
     q.pop();
     if (leftnode == NULL && rightnode == NULL){
        continue;
     }
     if (leftnode==NULL || rightnode==NULL||(leftnode->val != rightnode->val))
     {
        return false;
     }
      
     q.push(leftnode->left);
     q.push(rightnode->right);
     q.push(leftnode->right);
     q.push(rightnode->left);
 }
 return true;


}

2.递归法

递归入口是两个节点,因此我们重新写一个函数进行递归,参数有两个节点,对根的左子树和右子树进行递归,画basecase的时候记得要画有两个节点可以进入递归的情况,如图

可以看到一些不对称的条件,如代码中的条件

cpp 复制代码
 bool isSymmetric(TreeNode* root) {

   if(root==NULL) return true;

   return fun(root->left,root->right);
}
bool fun(TreeNode* l,TreeNode* r){
    if(l==NULL && r==NULL) return true;
    if((l==NULL&&r!=NULL) || (l!=NULL && r==NULL)||l->val!=r->val){
        return false;
    }
    bool a = fun(l->left,r->right);
    bool b = fun(l->right,r->left);
    return a&&b;
}
};
相关推荐
甘露s2 小时前
Redis 核心:概念理解与五大数据结构
数据结构·数据库·redis
多米Domi0112 小时前
0x3f 第41天 setnx的分布式锁和redission,白天写项目书,双指针
数据结构·分布式·python·算法·leetcode·缓存
鱼跃鹰飞3 小时前
LeetCode热题100:5.最长回文子串
数据结构·算法·leetcode
tobias.b3 小时前
408真题解析-2010-10-数据结构-快速排序
java·数据结构·算法·计算机考研·408真题解析
历程里程碑3 小时前
Linux 4 指令结尾&&通过shell明白指令实现的原理
linux·c语言·数据结构·笔记·算法·排序算法
tobias.b3 小时前
408真题解析-2010-11-数据结构-基础排序算法特征
数据结构·算法·排序算法·计算机考研·408真题解析
万象.6 小时前
redis数据结构set和zset的基本指令
数据结构·数据库·redis
晚风吹长发11 小时前
初步了解Linux中的命名管道及简单应用和简单日志
linux·运维·服务器·开发语言·数据结构·c++·算法
夏乌_Wx12 小时前
练题100天——DAY42:移除链表元素 ★★☆☆☆
数据结构