Construct Binary Search Tree from Preorder Traversal in Python


Suppose we have to create a binary search tree that matches the given preorder traversal. So if the pre-order traversal is like [8,5,1,7,10,12], then the output will be [8,5,10,1,7,null,12], so the tree will be −

To solve this, we will follow these steps −

  • root := 0th node of the preorder traversal list
  • stack := a stack, and push root into the stack
  • for each element i from the second element of the preorder list
    • i := a node with value i
    • if value of i < top of the stack top element, then
      • left of stack top node := i
      • insert i into the stack
    • otherwise
      • while stack is not empty, and stack top element value < value of i
        • last := top of stack
        • pop element from stack
      • right of the last node := i
      • insert i into the stack
  • return root

Let us see the following implementation to get better understanding −

Example

class Solution(object):
   def bstFromPreorder(self, preorder):
      """
      :type preorder: List[int]
      :rtype: TreeNode
      """
      root = TreeNode(preorder[0])
      stack = [root]
      for i in preorder[1:]:
         i = TreeNode(i)
         if i.val<stack[-1].val:
            stack[-1].left = i
            stack.append(i)
         else:
            while stack and stack[-1].val<i.val:
               last = stack.pop(-1)
            last.right = i
            stack.append(i)
      return root

Input

[8,5,1,7,10,12]

Output

[8,5,10,1,7,null,12]

Updated on: 02-May-2020

552 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements