只是想知道是否可以使用此代码编译和运行测试用例,当我尝试将其提交给其他测试用例时,此代码会失败

问题描述 投票:0回答:1
class Solution
{
    private:
    void helper(Node* root,vector<int>& ans){
        if(root == nullptr){
            return;
        }
        helper(root->left,ans);
        ans.push_back(root->data);
        helper(root->right,ans);
    }
    public:
    //Function to check if two trees are identical.
    bool isIdentical(Node *r1, Node *r2)
    {
        vector<int> ans1;
        vector<int> ans2;
        helper(r1,ans1);
        helper(r2,ans2);
        int n = ans1.size();
        int m = ans2.size();
        if(n != m) return false;
        for(int i = 0;i<n;i++){
            if(ans1[i] != ans2[i]){
                return false;
            }
        }
        return true;
    }
};

在这我想知道两棵树是否相同,所以我检查它们的中序遍历并将它们存储在一个数组中,然后我的任务是比较两个数组是否相同

c++ tree
1个回答
0
投票

如果树是任意二叉树,则它们不是由其中序遍历唯一定义的。

举个例子,

  2
 / 
1   

1
 \
  2

具有相同的中序遍历。

只需进行递归比较即可:

bool identical_trees(const Node* a, const Node* b) {
    return (a == nullptr && b == nullptr) // Both trees are empty
        || (a != nullptr && b != nullptr  // Neither tree is empty
            && a->data == b->data
            && identical_trees(a->left, b->left)
            && identical_trees(a->right, b->right));
}
© www.soinside.com 2019 - 2024. All rights reserved.