LeetCode刷题笔记--101. Symmetric Tree

博客围绕判断二叉树是否对称展开,给出递归和迭代两种实现思路及对应代码。递归方法简洁,通过对比左右子树;迭代方法则借助队列,逐层检查节点值。两种方法均能有效判断二叉树是否为对称树。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

101. Symmetric Tree

Easy

197145FavoriteShare

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree [1,2,2,3,4,4,3] is symmetric:

    1
   / \
  2   2
 / \ / \
3  4 4  3

 

But the following [1,2,2,null,3,null,3] is not:

    1
   / \
  2   2
   \   \
   3    3

 

Note:
Bonus points if you could solve it both recursively and iteratively.

看了答案再写的,感觉真是简约多了:

/**
 * 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 comp(TreeNode* left, TreeNode* right)
    {
        if(!left&&!right)return true;
        if((!left&&right)||(left&&!right)||(left->val!=right->val))return false;
        return comp(left->left,right->right)&&comp(left->right,right->left);//此处注意,对比左左和右右,不要写错了。
    }
    
    bool isSymmetric(TreeNode* root) {
        if(!root)return true;
        return comp(root->left,root->right);
    }
    
    
};

AC的代码如下,没看答案写的,还调试了半天。感觉写的太多了点,但是通过了。出过问题的地方都标记到代码上了。

思路是:根不用检查
root->next需要完全一样
第三层,检查左左==右右  左右==右左
第四层,把该层的元素取出,分别放入两个queue中

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
#include <iostream>
#include <math.h>
using namespace std;
class Solution {
public:
    bool comp(queue<TreeNode*> L,queue<TreeNode*> R,int level)
    {
        int tlevel=level;
        level=0;
        bool t=true;//此处要检查每一次对比的结果,如果有一次不相等,t=false,如果每次都相等,t=true
        while(tlevel>0)
        {
            TreeNode* tempL=L.front();
            L.pop();
            TreeNode* tempR=R.front();
            R.pop();
            if(tempL==NULL&&tempR==NULL){}
            else if(tempL==NULL||tempR==NULL)t=false;
            else if(tempL->val!=tempR->val)t=false;
            else
            {
                if(tempL->left==NULL&&tempR->right==NULL&&tempL->right==NULL&&tempR->left==NULL){}
                else if(tempL->left==NULL&&tempR->right==NULL&&tempL->right!=NULL&&tempR->left!=NULL)
                {
                    L.push(tempL->right);
                    R.push(tempR->left);
                    level++;
                }
                else if(tempL->left!=NULL&&tempR->right!=NULL&&tempL->right==NULL&&tempR->left==NULL)
                {
                    L.push(tempL->left);
                    R.push(tempR->right);
                    level++;
                }
                else if(tempL->left!=NULL&&tempR->right!=NULL&&tempL->right!=NULL&&tempR->left!=NULL)
                {
                    L.push(tempL->left);
                    L.push(tempL->right);
                    R.push(tempR->right);
                    R.push(tempR->left);
                    level+=2;
                }
                else return false;
                
            }
            tlevel--;
            if(tlevel==0&&!L.size()&&t)return true;//此处检查是否所有的值都检查完了,即都到叶子节点了,此时如果t都是true,说明对比下来都一样的,返回true
            else if(tlevel==0&&!L.size()&&!t)return false;//所有的值都检查完了,存在至少1个不同的值,返回false
        }
        //level=std::pow(2,level+1)/2;
        if(!t)return false;
        else{return comp(L,R,level);}
        
    }
    
    bool isSymmetric(TreeNode* root) {
        if(root==NULL)return true;
        if(root->left==NULL&&root->right==NULL)return true;
        if(root->left==NULL||root->right==NULL)return false;
        int level=1;
        queue<TreeNode*> L;
        queue<TreeNode*> R;
        L.push(root->left);
        R.push(root->right);
        return comp(L,R,level);
    }
};

内容概要:本文档提供了关于“微型车间生产线的设计与生产数据采集试验研究”的毕业设计复现代码,涵盖从论文结构生成、机械结构设计、PLC控制系统设计、生产数据采集与分析系统、有限元分析、进度管理、文献管理和论文排版系统的完整实现。通过Python代码和API调用,详细展示了各个模块的功能实现和相互协作。例如,利用SolidWorks API设计机械结构,通过PLC控制系统模拟生产流程,使用数据分析工具进行生产数据的采集和异常检测,以及利用进度管理系统规划项目时间表。 适合人群:具有机械工程、自动化控制或计算机编程基础的学生或研究人员,尤其是从事智能制造领域相关工作的人员。 使用场景及目标:①帮助学生或研究人员快速搭建和理解微型车间生产线的设计与实现;②提供完整的代码框架,便于修改和扩展以适应不同的应用场景;③作为教学或科研项目的参考资料,用于学习和研究智能制造技术。 阅读建议:此资源不仅包含详细的代码实现,还涉及多个学科领域的知识,如机械设计、电气控制、数据分析等。因此,在学习过程中,建议读者结合实际操作,逐步理解每个模块的功能和原理,并尝试调整参数以观察不同设置下的系统表现。同时,可以参考提供的文献资料,深入研究相关理论和技术背景。
本次的学生体质健康信息管理网站,按照用户的角色可以分为教师与学生,后台设置管理员角色来对学生的信息进行管理。,设计如下: 1、后台管理系统 后台管理系统主要是为该系统的管理员提供信息管理服务的系统,具体包括的功能模块如下: (1)管理员信息管理 (2)教师信息管理 (3)学生信息管理 (4)健康信息统计(图形化进行健康,亚健康等学生的信息数量统计) 2、教师角色的功能模块设计 教师角色所需要的功能模块主要包括了如下的一些内容: (1)个人资料修改 (2)学生体质健康管理:录入相关数据,包括但不限于身高、体重、肺活量、视力等生理指标以及运动能力、身体成分、骨密度等健康指标,并且设置健康,亚健康状态 (3)学生健康建议:根据体质信息,进行学生健康的建议 (4)健康预警:对健康出问的学生,进行健康预警 (5)饮食和锻炼情况管理,查看 3、学生角色 学生角色可以通过该信息网站看到个人的基本信息,能够看到教师给与学生的健康建议等,功能模块设计如下: (1)个人资料修改 (2)我的健康建议查看 (3)我的健康预警 (4)饮食和锻炼情况管理,记录平时的饮食和锻炼情况 完整前后端源码,部署后可正常运行! 环境说明 开发语言:Java后端 框架:ssm,mybatis JDK版本:JDK1.8+ 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:eclipse/idea Maven包:Maven3.3+ 部署容器:tomcat7.5+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值