crack the code interview 4.7

来源:互联网 发布:中控考勤软件 编辑:程序博客网 时间:2024/04/27 22:39

You have two very large binary trees: T1, with millions of nodes, and T2, with hundreds of nodes. Create an algorithm to decide if T2 is a subtree of T1.


#include <iostream>
using namespace std;


struct TreeNode
{
    int value;
    TreeNode * left;
    TreeNode * right;
    TreeNode(int v, TreeNode * l, TreeNode * r)
    {
        value = v;
        left = l;
        right = r;
    }
    TreeNode(int v)
    {
        value = v;
        left = NULL;
        right = NULL;
    }
};


//node1 contain node2
bool matchTree(TreeNode * node1, TreeNode * node2)
{
    if (node1 == NULL && node2 != NULL)
        return false;
    else if (node2 == NULL)
        return true;
    else if (node1->value != node2->value)
    {
        cout<<"not"<<endl;
        return false;
    }
    else if (node1->value == node2->value)
    {
        return matchTree(node1->left, node2->left) && matchTree(node1->right, node2->right);
    }
}


bool subTree(TreeNode * node1, TreeNode * node2)
{
    
    if (matchTree(node1, node2))
        return true;
    else if (node1->left)
    {
        cout<<"left"<<endl;
        return subTree(node1->left, node2);
    }
        
    else if (node1->right)
    {
        cout<<"right"<<endl;
        return subTree(node1->right, node2);
    }
}


int main(int argc, char *argv[])
{
    TreeNode * node0 = new TreeNode(0);
    TreeNode * node1 = new TreeNode(1);
    TreeNode * node2 = new TreeNode(2, node0, node1);
    TreeNode * node3 = new TreeNode(3);
    TreeNode * node4 = new TreeNode(4, node2, node3);
    cout<<subTree(node1, node2)<<endl;
    
    return 0;
}


0 0
原创粉丝点击