1、简单做法根据层次遍历去把树的所有元素都先给存到vector里,再去比较两个vector是否相等。
通过广度优先搜索把一棵树的元素根据层次遍历的顺序记录下来。
/**
* 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) {
vector<int> pnum;
vector<int> qnum;
preorder(pnum,p);
preorder(qnum,q);
if(pnum.size()!=qnum.size()) return false;
int cnt=pnum.size()-1;
while(cnt>=0)
{
if(pnum[cnt]!=qnum[cnt]) return false;
--cnt;
}
return true;
}
void preorder(vector<int>& nums,TreeNode* root)
{
if(root==NULL)
{
nums.push_back(10001);
return ;
}
nums.push_back(root->val);
TreeNode* a;
queue<TreeNode*> que;
que.push(root);
while(!que.empty())
{
a=que.front();
que.pop();
if(a->left==NULL) nums.push_back(10001);
else
{
nums.push_back(a->left->val);
que.push(a->left);
}
if(a->right==NULL) nums.push_back(10001);
else
{
nums.push_back(a->right->val);
que.push(a->right);
}
}
}
};