There are two binary trees T1 and T2 which store character data, duplicates allowed.
How can I find whether T2 is a subtree of T1 ? .
T1 has millions of nodes and
If your trees are not sorted in any way, I don't see any other way than to do a brute-force search: walk through tree T1
and check to see if you reach a node which matches the first node of tree T2
. If not, continue traversing T1
. If so, check if the next nodes match, until you find the end of T2
, in which case you have a hit: your tree T2
is indeed a subtree of T1
.
If you know the depth of every single node of T1
(from leaf to node), you could skip any nodes which are not as deep as the subtree you are looking for. This could help you eliminate a lot of needless comparisons. Say that T1
and T2
are well balanced, then tree T1
will have a total depth of 20 (2**20
> 1,000,000
) and tree T2
will have a depth of 7 (2**7
> 100
). You'll just have to walk the 13 first layers of T1
(8192 nodes -- or is that 14 layers and 16384 nodes?) and will be able to skip about 90% of T1
...
However, if by subtree you mean that leaf nodes of T2
are also leaf nodes of T1
, then you could do a first traversal of T1
and compute the depth of every node (distance from leaf to node) and then only check the subtrees which have the same depth as T2
.