判断一个树是否包含另一个树的全部拓扑结构

#include "Tree.h"
using namespace std;

bool check(Node* head, Node* node);
bool contain(Node* head, Node* node)
{
    return check(head, node) || contain(head->left, node) || contain(head->right, node);
}

bool check(Node* head, Node* node)
{
    if(node == nullptr)
        return true;
    if(head == nullptr || head->value != node->value)
        return false;
    return check(head->left, node->left) && check(head->right, node->right);
}

int main()
{
    Node* pNode0 = new Node(5);
    Node* pNode1 = new Node(7);
    Node* pNode2 = new Node(3);
    Node* pNode3 = new Node(4);
    Node* pNode4 = new Node(5);
    Node* pNode5 = new Node(6);
    Node* pNode6 = new Node(8);

    connectTree(pNode0, pNode1, pNode2);
    connectTree(pNode1, pNode3, pNode4);
    connectTree(pNode2, pNode5, pNode6);

    cout << contain(pNode0, pNode1) << endl;
}

猜你喜欢

转载自blog.csdn.net/wzc2608/article/details/80869699
今日推荐