给你一个二叉树的根节点 root , 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
队列层序遍历
流程
进行两次同步遍历,分别从根节点的左子树和右子树开始,然后比较每个节点的值
代码实现
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if (root == nullptr)
return true;
queue<TreeNode*> que;
que.push(root->left);
que.push(root->right);
while (!que.empty()) {
TreeNode* left = que.front();
que.pop();
TreeNode* right = que.front();
que.pop();
if (left == nullptr && right == nullptr)
continue;
if (left == nullptr || right == nullptr)
return false;
if (left->val != right->val)
return false;
que.push(left->left);
que.push(right->right);
que.push(left->right);
que.push(right->left);
}
return true;
}
};
递归后序遍历
流程
因为要遍历两棵树而且要比较内侧和外侧节点,所以准确的来说是一个树的遍历顺序是左右中,一个树的遍历顺序是右左中
代码实现
class Solution {
public:
bool isSymmetric(TreeNode* root) {
return compare(root->left, root->right);
}
bool compare(TreeNode* left, TreeNode* right) {
if (left == nullptr && right == nullptr)
return true;
if (left == nullptr || right == nullptr)
return false;
if (left->val != right->val)
return false;
return compare(left->left, right->right) &&
compare(left->right, right->left);
}
};
标签:right,return,nullptr,力扣,que,二叉树,对称,root,left
From: https://blog.csdn.net/Coldreams/article/details/139526165