Heim  >  Artikel  >  Backend-Entwicklung  >  C++ prüft, ob zwei binäre Suchbäume gleich sind

C++ prüft, ob zwei binäre Suchbäume gleich sind

藏色散人
藏色散人Original
2019-01-25 13:55:574427Durchsuche

Gegeben sind die Wurzelknoten zweier binärer Suchbäume. Wenn zwei binäre Suchbäume identisch sind, geben Sie 1 aus, andernfalls geben Sie 0 aus. Zwei Bäume sind identisch, wenn sie strukturell identisch sind und Knoten mit denselben Werten haben.

C++ prüft, ob zwei binäre Suchbäume gleich sind

Im obigen Bild sind Baum1 und Baum2 gleich.

Um festzustellen, ob zwei Bäume gleich sind, müssen wir beide Bäume gleichzeitig durchqueren und beim Durchqueren die Daten und untergeordneten Knoten der Bäume vergleichen.

Das Folgende ist ein schrittweiser Algorithmus, um zu überprüfen, ob zwei BSTs gleich sind:

1 Wenn beide Bäume leer sind, geben Sie 1 zurück.

2. Andernfalls, wenn beide Bäume nicht leer sind

-überprüfen Sie die Daten des Wurzelknotens (Baum1-> Daten == Baum2-> Daten)

- Rekursiv den linken Teilbaum prüfen, also sameTree(tree1-> left_subtree, tree2-> left_subtree) aufrufen

- Rekursiv den rechten Teilbaum prüfen, also sameTree(tree1-> right_subtree aufrufen , tree2-> right_subtree)

– Gibt 1 zurück, wenn der in den obigen drei Schritten zurückgegebene Wert wahr ist.

3. Andernfalls wird 0 zurückgegeben (einer ist leer und der andere nicht).

Das Folgende ist die Implementierung der obigen Methode:

// c++程序检查两个bst是否相同
  
#include <iostream> 
using namespace std; 
  
// BST节点
struct Node { 
    int data; 
    struct Node* left; 
    struct Node* right; 
}; 
  
// 创建新节点的实用程序函数 
struct Node* newNode(int data) 
{ 
    struct Node* node = (struct Node*) 
        malloc(sizeof(struct Node)); 
    node->data = data; 
    node->left = NULL; 
    node->right = NULL; 
  
    return node; 
} 
  
//函数执行顺序遍历
void inorder(Node* root) 
{ 
    if (root == NULL) 
        return; 
  
    inorder(root->left); 
  
    cout << root->data << " "; 
  
    inorder(root->right); 
} 
  
// 函数检查两个bst是否相同
int isIdentical(Node* root1, Node* root2) 
{ 
    // 检查这两棵树是否都是空的 
    if (root1 == NULL && root2 == NULL) 
        return 1; 
    // 如果树中的任意一个为非空,另一个为空,则返回false
    else if (root1 != NULL && root2 == NULL) 
        return 0; 
    else if (root1 == NULL && root2 != NULL) 
        return 0; 
    else { 
    // 检查两个树的当前数据是否相等,并递归地检查左子树和右子树
        if (root1->data == root2->data && isIdentical(root1->left, root2->left) 
            && isIdentical(root1->right, root2->right)) 
            return 1; 
        else
            return 0; 
    } 
} 
  
// 驱动代码
int main() 
{ 
    struct Node* root1 = newNode(5); 
    struct Node* root2 = newNode(5); 
    root1->left = newNode(3); 
    root1->right = newNode(8); 
    root1->left->left = newNode(2); 
    root1->left->right = newNode(4); 
  
    root2->left = newNode(3); 
    root2->right = newNode(8); 
    root2->left->left = newNode(2); 
    root2->left->right = newNode(4); 
  
    if (isIdentical(root1, root2)) 
        cout << "Both BSTs are identical"; 
    else
        cout << "BSTs are not identical"; 
  
    return 0; 
}

Ausgabe:

Both BSTs are identical

In diesem Artikel geht es um die Methode zur Überprüfung, ob zwei Binärsuchen durchgeführt werden Bäume sind die gleichen Einführung, ich hoffe, es wird Freunden in Not hilfreich sein!

Das obige ist der detaillierte Inhalt vonC++ prüft, ob zwei binäre Suchbäume gleich sind. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn