题目:
/**
* 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 isSame(TreeNode* left,TreeNode* right)
{
queue<TreeNode*> que;
que.push(left);
que.push(right);
//que.push(right);
while(!que.empty())
{
TreeNode* node1 = que.front();
que.pop();
TreeNode* node2 = que.front();
que.pop();
if(node1==nullptr && node2==nullptr) continue;
else if(node1!=nullptr && node2==nullptr) return false;
else if(node1==nullptr && node2!=nullptr) return false;
else if(node1->val != node2->val) return false;
que.push(node1->left);
que.push(node2->left);
que.push(node1->right);
que.push(node2->right);
}
return true;
}
bool isSubtree(TreeNode* s, TreeNode* t) {
// 因为提上给出了 s 和 t 非空,因此不判断也可~
queue<TreeNode*> que;
que.push(s);
while(!que.empty())
{
// 对 s 进行层序遍历,当碰到与 t 相同的节点时,就开始判断,
// 如果找到相同的子树,就返回true,否则就继续遍历
int size = que.size();
for(int i=0; i<size; i++)
{
TreeNode* node = que.front();
que.pop();
if(node->val == t->val)
{
bool res = isSame(node,t);
if(res==1)
{
return true;
}
}
if(node->left != nullptr) que.push(node->left);
if(node->right != nullptr) que.push(node->right);
}
}
return false;
}
};