For a given binary tree find maximum binary search sub-tree

前端 未结 7 1983
南旧
南旧 2021-02-02 17:34

For a given binary tree, find the largest subtree which is also binary search tree?

Example:

Input:

                   10
               /                


        
7条回答
  •  余生分开走
    2021-02-02 17:41

    root(Tree L A R) = A
    
    MaxBST(NULL) = (true, 0, NULL)
    MaxBST(Tree L A R as T) = 
      let
        # Look at both children
        (L_is_BST, L_size, L_sub) = MaxBST(L)
        (R_is_BST, R_size, R_sub) = MaxBST(R)
      in
      # If they're both good, then this node might be good too
      if L_is_BST and R_is_BST and (L == NULL or root(L) < A) and (R == NULL or A < root(R))
      then (true, 1 + L_size + R_size, T)
      else
           # This node is no good, so give back the best our children had to offer
           (false, max(L_size, R_size), if L_size > R_size then L_sub else R_sub)
    

    Looks at each tree node exactly once, so runs in O(N).

    Edit: Crud, this doesn't consider that it can leave out some parts of a subtree. When I read subtree, I assumed "the entire tree rooted at some node". I may come back to fix this later.

提交回复
热议问题