判断二叉树是否对称需递归或迭代检查左右子树是否镜像相等:即左子树左孩子与右子树右孩子、左子树右孩子与右子树左孩子分别相等且值相同;常见错误是误判子树各自对称或忽略空指针和节点值校验。
判断二叉树是否对称,本质是检查左子树是否与右子树“镜像相等”:即左子树的左孩子等于右子树的右孩子,左子树的右孩子等于右子树的左孩子。不能只比结构,必须同步比较节点值。
关键点在于设计一个辅助函数 isMirror(TreeNode* left, TreeNode* right),它接收两个子树根节点,返回它们是否互为镜像:
return true)return false)return false)left->left 与 right->right,以及 left->right 与 right->left
bool isSymmetric(TreeNode* root) {
if (!root) return true;
return isM
irror(root->left, root->right);
}
bool isMirror(TreeNode left, TreeNode right) {
if (!left && !right) return true;
if (!left || !right) return false;
if (left->val != right->val) return false;
return isMirror(left->left, right->right) &&
isMirror(left->right, right->left);
}
递归直观但有栈溢出风险;迭代更可控,核心是把“待比较的节点对”压入栈中,每次弹出一对做值比较,再把下一层的镜像组合推入栈。
初始压入 root->left 和 root->right;每次取两个节点 l 和 r:
false
false
l->left 与 r->right、l->right 与 r->left 成对压栈bool isSymmetric(TreeNode* root) {
if (!root) return true;
stack stk;
stk.push(root->left);
stk.push(root->right);
while (!stk.empty()) {
TreeNode* r = stk.top(); stk.pop();
TreeNode* l = stk.top(); stk.pop();
if (!l && !r) continue;
if (!l || !r) return false;
if (l->val != r->val) return false;
stk.push(l->left); stk.push(r->right);
stk.push(l->right); stk.push(r->left);
}
return true;
} 新手常写成:isSymmetric(root->left) && isSymmetric(root->right) —— 这是在检查“左子树自身对称”且“右子树自身对称”,完全偏离题意。对称性是跨左右子树的镜像关系,不是子树内部性质。
另一个典型错误是只比结构忽略值:比如用 nullptr 占位但没校验 val,导致 [1,2,2,null,3,null,3] 被误判为对称(实际不是,因为两个 3 不在镜像位置)。
测试时务必覆盖这些用例:
[1,2,2,3,4,4,3] → true[1,2,2,null,3,null,3] → false(注意 null 的位置)[1] → true[] → true递归和迭代都是 O(n) 时间复杂度,每个节点访问一次。但空间表现不同:
O(n)(退化为链表),平均 O(h)(h 为树高)O(w) 个节点(w 为最大宽度),对于满二叉树,宽度远小于深度,此时迭代更省内存如果题目明确要求“避免递归”或输入可能极深,优先选迭代;否则递归更易写对、不易漏边界。
真正容易被忽略的是空指针解引用——无论递归还是迭代,必须在取 ->val 或访问子指针前,先判断指针非空。漏掉这一层检查,本地能过但线上 runtime error 是高频翻车点。
# node
# 栈
# c++
# NULL
# Error
# 递归
# 指针
# 空指针
# 算法
# 子树
# 镜像
# 迭代
# 为空
# 都不
# 二叉树
# 不对称
# 的是
# 只比
相关文章:
jQuery 常见小例汇总
个人网站制作流程图片大全,个人网站如何注销?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
如何在阿里云部署织梦网站?
建站主机数据库如何配置才能提升网站性能?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
在线制作视频网站免费,都有哪些好的动漫网站?
如何续费美橙建站之星域名及服务?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
宝塔建站助手安装配置与建站模板使用全流程解析
昆明高端网站制作公司,昆明公租房申请网上登录入口?
如何选择高效可靠的多用户建站源码资源?
如何在IIS7中新建站点?详细步骤解析
建站之星如何优化SEO以实现高效排名?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
外贸公司网站制作哪家好,maersk船公司官网?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
高端智能建站公司优选:品牌定制与SEO优化一站式服务
如何选购建站域名与空间?自助平台全解析
攀枝花网站建设,攀枝花营业执照网上怎么年审?
nginx修改上传文件大小限制的方法
如何快速生成橙子建站落地页链接?
网页设计与网站制作内容,怎样注册网站?
开封网站制作公司,网络用语开封是什么意思?
平台云上自主建站:模板化设计与智能工具打造高效网站
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
如何快速查询网站的真实建站时间?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
制作网页的网站有哪些,电脑上怎么做网页?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
如何设计高效校园网站?
宝塔新建站点为何无法访问?如何排查?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
网站制作费用多少钱,一个网站的运营,需要哪些费用?
建站之星如何一键生成手机站?
如何选择靠谱的建站公司加盟品牌?
建站之星ASP如何实现CMS高效搭建与安全管理?
在线制作视频的网站有哪些,电脑如何制作视频短片?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
制作电商网页,电商供应链怎么做?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
网站制作软件有哪些,制图软件有哪些?
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
北京专业网站制作设计师招聘,北京白云观官方网站?
如何通过FTP服务器快速搭建网站?
如何通过智能用户系统一键生成高效建站方案?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
如何快速建站并高效导出源代码?
*请认真填写需求信息,我们会在24小时内与您取得联系。