2023.7.2
这道题要求我们判断一颗二叉树是否是对称的。我使用的是广度优先搜索的思想,通过队列将需要比较的节点依次入队和出队,进行对称性的判断。下面直接上代码:
class Solution {
public:bool isSymmetric(TreeNode* root) {queue<TreeNode*> que;que.push(root->left);que.push(root->right);while(!que.empty()){TreeNode* leftnode = que.front(); que.pop();TreeNode* rightnode = que.front(); que.pop();//左右两节点都是空节点 也属于对称if(leftnode==nullptr && rightnode==nullptr) continue;//一节点为空另一节点不为空或者两节点值不同 都属于不对称的情况if(leftnode==nullptr || rightnode==nullptr || leftnode->val!=rightnode->val) return false;que.push(leftnode->left);que.push(rightnode->right);que.push(leftnode->right);que.push(rightnode->left);}return true;}
};
每次入队入两个节点,并且分别是左右子树的,然后进行对称性的判断,若满足对称条件则将左节点的左孩子和右节点的右孩子先入队,再将左节点的右孩子和右节点的左孩子入队。