广度优先搜索算法(Breadth-First Search,缩写为 BFS),又称为宽度优先搜索,是一种图形搜索算法。简单的说,BFS 是从根结点开始,沿着树的宽度遍历树的结点。如果所有结点均被访问,则算法中止。
1. 相同的树
/**
* 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 isSameTree(TreeNode* p, TreeNode* q) {
if(p==nullptr && q==nullptr){
return true;
}
//递归往往是基于最简单的例子的
if(p!=nullptr && q!=nullptr && p->val==q->val){
return (isSameTree(p->left, q->left) && isSameTree(p->right, q->right));
}else{
return false;
}
}
};
再复杂的问题都是从简单变过来的,所以不要怕,从最简单的例子出发去解决问题。
2. 对称二叉树
/**
* 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 com(TreeNode* node1, TreeNode* node2){
if(node1==nullptr && node2==nullptr){
return true;
}
if(node1==nullptr || node2==nullptr || node1->val!=node2->val){
return false;
}
return com(node1->left,node2->right) && com(node1->right,node2->left);
}
public:
bool isSymmetric(TreeNode* root) {
if(root==nullptr){
return true;
}
return com(root->left,root->right);
}
};