crack the code interview 4.7

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
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"<         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"<         return subTree(node1->left, node2);
    }
        
    else if (node1->right)
    {
        cout<<"right"<         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<     
    return 0;
}


你可能感兴趣的:(crack,the,code,interview)