繁体   English   中英

在 C++ 中比较两个 BST 的节点

[英]Comparing nodes of two BSTs in C++

我需要将一个 BST 的每个节点与另一个 BST 的所有节点进行比较。

类似于您在数组中进行比较的方式:

string arr[10];
string arr2[10];

for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 10; j++) {
        compare(arr[j], arr2[i]);
    }
}

但是您在 bst1 中遍历的不是外部 for 循环,而是在 bst2 中遍历而不是内部 for 循环。 然后将 bst1 的节点与 bst2 的所有节点进行比较,然后移动到 bst1 的下一个节点并将其与 bst2 的所有节点进行比较,依此类推

似乎无法理解如何实现遍历。 任何帮助,将不胜感激

这个想法是在Tree1的根节点上调用traverse并且对于其中的每个节点,将其传递给另一个在Tree2根节点上调用的函数compare并将传递的节点与其中的每个节点进行比较。

#include <iostream>

struct Node
{
    int val;
    Node *left, *right;
};

void compare(Node *curr2, Node *curr1)
{
    if (curr2 == nullptr)
        return;

    compare(curr2->left, curr1);
    if (curr2->val == curr1->val)       // replace with your comparison function
        cout << "Match found for " << curr1->val << endl;
    compare(curr2->right, curr1);
}

void traverse(Node *curr1, Node *root2)
{
    if (curr1 == nullptr)
        return;

    traverse(curr1->left, root2);
    compare(root2, curr1);
    traverse(curr1->right, root2);
}

int main()
{
    Node *root1, *root2;
    traverse(root1, root2);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM