using iterators: 


__author__ = 'deepika'

"""
This code will return iterator for inorder traversal of a BST
"""
class TreeNode(object):
     def __init__(self, x):
         self.val = x
         self.left = None
         self.right = None

     def __repr__(self):
         return str(self.val)

class InorderIterator:

    def __init__(self, root):
        self.root = root
        self.stack = []
        self.appendLeftTree()

    def appendLeftTree(self, start=None):
        temp = self.root if start is None else start
        while temp:
            self.stack.append(temp)
            temp = temp.left


    def next(self):
        if self.stack:
            next_item = self.stack.pop()
            if next_item.right:
                self.appendLeftTree(next_item.right)
            return next_item.val
        return None

class ReverseInOrderIterator:

    def __init__(self, root):
        self.root = root
        self.stack = []
        self.appendRightTree()

    def appendRightTree(self, start=None):
        temp = self.root if start is None else start
        while temp:
            self.stack.append(temp)
            temp = temp.right


    def next(self):
        if self.stack:
            next_item = self.stack.pop()
            if next_item.left:
                self.appendRightTree(next_item.left)
            return next_item.val
        return None

class Solution:

    def binarySearchBST(self, root, key):
        left_itr = InorderIterator(root)
        right_itr = ReverseInOrderIterator(root)
        left_val = left_itr.next()
        right_val = right_itr.next()
        while True:
            if left_val >= right_val:
                break
            if left_val + right_val == key:
                print " Found: ", left_val, " ", right_val
            if left_val + right_val < key:
                left_val = left_itr.next()
            else:
                right_val = right_itr.next()

root=TreeNode(10)
root.left=TreeNode(5)
root.right=TreeNode(11)
root.left.left=TreeNode(1)
root.left.right=TreeNode(8)
root.left.right.left=TreeNode(7)
root.right.right=TreeNode(14)
itr = InorderIterator(root)
result = []
for i in range(7):
    result.append(itr.next())
print result

result = []
itr = ReverseInOrderIterator(root)
for i in range(7):
    result.append(itr.next())
print result

s=Solution()
s.binarySearchBST(root, 18)


On Sunday, September 2, 2012 at 1:02:57 PM UTC-7, Navin Kumar wrote:
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to algogeeks+unsubscr...@googlegroups.com.

Reply via email to