二叉树——验真对称二叉树
原题,如图所示,要求给定一个二叉树的根节点,验证是否对称
节点定义:

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) {} };
1.mine:简单利用对称性,用层序遍历的方式用栈依序处理(下一层的)节点,如果节点为null则特别标记后入栈
左侧入栈,右侧出栈,最后如果stack不为空,那么即非对称。
2.standard:运用双指针,一个指针右移则另一个左移,一个左移则另一个右移。
【递归】

class Solution { public: bool ck(TreeNode *l, TreeNode *r) { if (!l && !r) return true; if (!l || !r) return false; return l->val == r->val && ck(l->left, r->right) && ck(l->right, r->left); } bool isSymmetric(TreeNode *root) { return ck(root, root); } };
【迭代】
用队列模拟递归的双指针,每次入/出队两个元素,进行比较。

class Solution { public: bool isSymmetric(TreeNode *root) { if (!root) return true; queue<TreeNode *> q; TreeNode *x = nullptr, *y = nullptr; q.push(root);q.push(root); while (q.size()) { x = q.front();q.pop(); y = q.front();q.pop(); if (!x && !y) continue; if ((!x || !y) || (x->val != y->val)) return false; q.push(x->left);q.push(y->right); q.push(x->right);q.push(y->left); } return true; } };
analyse:
迭代法,利用队列模拟双指针
首先我们引入一个队列,这是把递归程序改写成迭代程序的常用方法。
初始化时我们把根节点入队两次。
每次提取两个结点并比较它们的值
(队列中每两个连续的结点应该是相等的,而且它们的子树互为镜像),
然后将两个结点的左右子结点按相反的顺序插入队列中。
当队列为空时,
或者我们检测到树不对称(即从队列中取出两个不相等的连续结点)时,该算法结束。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南