-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.cpp
70 lines (63 loc) · 2.27 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/**
* 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) {}
* };
*/
// Définition de la structure pour stocker les éléments dans la file BFS
struct bfsNode
{
TreeNode *p; // Pointeur vers le noeud dans l'arbre p
TreeNode *q; // Pointeur vers le noeud dans l'arbre q
// Constructeur pour initialiser les pointeurs
bfsNode(TreeNode *p, TreeNode *q)
{
this->p = p;
this->q = q;
}
};
class Solution
{
public:
bool isSameTree(TreeNode *p, TreeNode *q)
{
// Création d'une file pour parcourir les deux arbres en même temps
queue<bfsNode> bfsQueue;
bfsQueue.push({p, q}); // Ajout des racines des deux arbres dans la file
// Parcours BFS
while (!bfsQueue.empty())
{
// Récupération du noeud courant des deux arbres
bfsNode current = bfsQueue.front();
bfsQueue.pop();
// Si le noeud courant de l'arbre p est nul
if (current.p == nullptr)
{
// Si le noeud courant de l'arbre q est également nul, on passe au noeud suivant
if (current.q == nullptr)
{
continue; // On passe au noeud suivant
}
// Sinon, les arbres sont différents, on retourne false
return false;
}
// Si le noeud courant de l'arbre q est nul ou que les valeurs sont différentes,
// les arbres ne sont pas identiques, on retourne false
else if (current.q == nullptr || current.p->val != current.q->val)
{
return false;
}
// On ajoute les fils gauche et droit des noeuds courants des deux arbres dans la file
bfsQueue.push({current.q->left, current.p->left});
bfsQueue.push({current.q->right, current.p->right});
}
// Si le parcours BFS n'a pas trouvé de différence entre les deux arbres, on retourne true
return true;
}
};