> 백엔드 개발 > C#.Net 튜토리얼 > C++ 두 개의 이진 검색 트리가 동일한지 확인합니다.

C++ 두 개의 이진 검색 트리가 동일한지 확인합니다.

藏色散人
풀어 주다: 2019-01-25 13:55:57
원래의
4437명이 탐색했습니다.

두 개의 이진 검색 트리의 루트 노드가 주어졌습니다. 두 개의 이진 검색 트리가 동일하면 1을 인쇄하고, 그렇지 않으면 0을 인쇄합니다. 두 트리가 구조적으로 동일하고 동일한 값을 가진 노드를 갖는 경우 동일합니다.

C++ 두 개의 이진 검색 트리가 동일한지 확인합니다.

위 이미지에서는 tree1과 tree2가 모두 동일합니다.

두 트리가 동일한지 확인하려면 두 트리를 동시에 순회해야 하며 순회하는 동안 트리의 데이터와 하위 노드를 비교해야 합니다.

두 개의 BST가 동일한지 확인하는 단계별 알고리즘은 다음과 같습니다.

1 두 트리가 모두 비어 있으면 1을 반환합니다.

2. 그렇지 않고 두 트리가 모두 비어 있지 않은 경우

- 루트 노드의 데이터를 확인합니다(tree1-> 데이터 == tree2-> 데이터)

- 왼쪽 하위 트리를 재귀적으로 확인합니다. 즉, sameTree( tree1 -> left_subtree, tree2 -> left_subtree)

- 오른쪽 하위 트리를 재귀적으로 확인합니다. 즉, sameTree를 호출합니다(tree1 - > right_subtree, tree2 - > right_subtree)

- 위의 세 단계에서 반환된 값이 true이면 1이 반환됩니다.

3. 그렇지 않으면 0을 반환합니다(하나는 비어 있고 다른 하나는 비어 있음).

위 방법을 구현한 내용은 다음과 같습니다.

// 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; 
}
로그인 후 복사

출력:

Both BSTs are identical
로그인 후 복사

두 이진 검색 트리가 동일한지 확인하는 방법에 대한 글입니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

위 내용은 C++ 두 개의 이진 검색 트리가 동일한지 확인합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿