BFS做的Leetcode for Leaf Similar Trees Problem的错误答案

Wrong Answer on Leetcode for Leaf Similar Trees Problem done by BFS

我正在尝试使用广度优先搜索来解决给定的问题(我知道深度优先搜索最适合这种情况,但我只是想尝试一下)

我的代码似乎在其他测试用例的情况下有效,但在第一个测试用例的情况下失败。 请对我的代码提出一些改进建议。

问题 Link - https://leetcode.com/problems/leaf-similar-trees/

我的代码:

 /**
 * 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 leafSimilar(TreeNode* root1, TreeNode* root2) {
        vector<int> v1, v2;
        
        queue<TreeNode*> q1;
        queue<TreeNode*> q2;
        

        //Applying BFS for first tree
        q1.push(root1);
        while(!q1.empty())
        {
            int size = q1.size();
            for(int i=0;i<size;i++)
            {
                TreeNode* curr = q1.front();
                q1.pop();
                
              
                if(curr->left != NULL)
                    q1.push(curr->left);
                if(curr->right != NULL)
                    q1.push(curr->right);
                
                
                if(curr->left == NULL && curr->right == NULL)
                    v1.push_back(curr->val); 
            }
            
        }
        
        
        //Applying BFS for second tree
        q2.push(root2);
        while(!q2.empty())
        {
            int size = q2.size();
            for(int i=0;i<size;i++)
            {
                TreeNode* curr = q2.front();
                q2.pop();
                
                
                
                if(curr->left != NULL)
                    q2.push(curr->left);
                if(curr->right != NULL)
                    q2.push(curr->right);
                
                if(curr->left == NULL && curr->right == NULL)
                    v2.push_back(curr->val);
            }
            
        }
        
         if(v1.size() != v2.size())
            return false;
        
         for(int i=0;i<v1.size();i++)
         {
             if(v1[i] != v2[i])
                 return false;
         }
        
        
        return true;
    }
};

我试过 运行 你在示例 1 上的代码。

v1 的内容:6,9,8,7,4

其中作为 v2 的内容:6,7,4,9,8

由于你在进行 BFS 遍历,深度较低的叶节点将比深度较高的叶节点先被推入结果向量。所以它不会保持从左到右的顺序。

要保持​​从左到右的顺序,您应该使用 DFS 遍历,请尝试使用树的中序遍历。