How to find largest common sub-tree in the given two binary search trees?

后端 未结 4 1625
滥情空心
滥情空心 2020-12-24 04:16

Two BSTs (Binary Search Trees) are given. How to find largest common sub-tree in the given two binary trees?

EDIT 1: Here

4条回答
  •  攒了一身酷
    2020-12-24 05:19

    Just hash the children and key of each node and look for duplicates. This would give a linear expected time algorithm. For example, see the following pseudocode, which assumes that there are no hash collisions (dealing with collisions would be straightforward):

    ret = -1
    // T is a tree node, H is a hash set, and first is a boolean flag
    hashTree(T, H, first):
      if (T is null):
        return 0 // leaf case
      h = hash(hashTree(T.left, H, first), hashTree(T.right, H, first), T.key)
      if (first):
        // store hashes of T1's nodes in the set H
        H.insert(h)
      else:
        // check for hashes of T2's nodes in the set H containing T1's nodes
        if H.contains(h):
          ret = max(ret, size(T)) // size is recursive and memoized to get O(n) total time
      return h
    
    H = {}
    hashTree(T1, H, true)
    hashTree(T2, H, false)
    return ret
    

    Note that this is assuming the standard definition of a subtree of a BST, namely that a subtree consists of a node and all of its descendants.

提交回复
热议问题