101. 对称二叉树
思路:两种方法,dfs和bfs
方法一:深度优先搜索dfs,用两个指针分别指向应该轴对称的位置,判断其是否相等,相等就接着判断下一个位置。
/**
* 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 dfs(TreeNode * p,TreeNode* q){
if(!p&&!q) return true;
if(!p||!q||p->val!=q->val) return false;
return dfs(p->left,q->right)&&dfs(p->right,q->left);
}
bool isSymmetric(TreeNode* root) {
return dfs(root,root);
}
};
方法二:广度优先搜索bfs,思路和dfs一样,只是现在是用队列queue替代了回溯的效果。
/**
* 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) {
bool flag=true;
queue<TreeNode *> qu;
qu.push(root);
qu.push(root);
while(qu.size()){
TreeNode *p,*q;
p=qu.front();
qu.pop();
q=qu.front();
qu.pop();
if(!p&&!q) continue;
if(!p||!q||p->val!=q->val){
flag=0;
break;
}
qu.push(p->left);
qu.push(q->right);
qu.push(p->right);
qu.push(q->left);
}
return flag;
}
};