BFS 对 Leetcode for Leaf Similar Tree 问题的错误回答

问题描述

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

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

问题链接 - 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),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,4,8

由于您正在执行 BFS 遍历,因此深度较低的叶节点将比深度较高的叶节点首先推送到结果向量中。所以它不会保持从左到右的顺序。

要保持从左到右的顺序,您应该使用 DFS Traversal,请尝试使用树的 In-order Traversal。