/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ #include <algorithm> #include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root1 TreeNode类 * @param root2 TreeNode类 * @return bool布尔型 */ vector<int> bfs(deque<TreeNode*> d, vector<int> v) { while(!d.empty()) { // 每次都清空v v.clear(); int len = d.size(); for(int i=0; i<len; ++i) { TreeNode* pre = d.front(); d.pop_front(); v.emplace_back(pre->val); if(pre->left) d.emplace_back(pre->left); if(pre->right) d.emplace_back(pre->right); } } return v; } bool leafSimilar(TreeNode* root1, TreeNode* root2) { // write code here // 广度优先搜索 deque<TreeNode*> d_1, d_2; d_1.emplace_back(root1); d_2.emplace_front(root2); vector<int> v; vector<int> v1 = bfs(d_1, v); vector<int> v2 = bfs(d_2, v); reverse(v1.begin(), v1.end()); return v1==v2; // 不理解题意,以为每一层都要判断,结果只需判断最后一层; // if(!root1 && !root2) // return true; // if((!root1 || !root2) || (root1->val != root2->val)) // return false; // return leafSimilar(root1->left, root2->right) && leafSimilar(root1->right, root2->left); } };