101. 对称二叉树
/**
* 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 isSymmetric(TreeNode* root) {
queue<TreeNode*> q;
/// 首先将根节点入队两次,在后续的遍历中每次取出两个节点
q.push(root);
q.push(root);
while (!q.empty())
{
/// 取出两个节点
/// 如果对称的话,这两个节点应该完全相同
TreeNode *u, *v;
u = q.front();
q.pop();
v = q.front();
q.pop();
/// 如果两个节点的值不相等
if (u->val != v->val)
return false;
/// 四个不对称的情况
/// 两侧不对称
if (u->left && !v->right)
return false;
if (!u->left && v->right)
return false;
/// 内侧不对称
if (u->right && !v->left)
return false;
if (!u->right && v->left)
return false;
/// 如果外侧都有子节点
if (u->left && v->right)
{
q.push(u->left);
q.push(v->right);
}
/// 如果内侧都有子节点
if (u->right && v->left)
{
q.push(u->right);
q.push(v->left);
}
}
return true;
}
};
本文详细探讨了LeetCode第101题——对称二叉树的问题,包括如何判断一棵二叉树是否对称,以及使用递归或迭代的解题思路和代码实现。

438

被折叠的 条评论
为什么被折叠?



