Skip to content

Instantly share code, notes, and snippets.

@vetional
Created October 9, 2017 08:10
Show Gist options
  • Save vetional/94be0a23f496485258abbf3f84a9fb7f to your computer and use it in GitHub Desktop.
Save vetional/94be0a23f496485258abbf3f84a9fb7f to your computer and use it in GitHub Desktop.
Kth largest in BST created by vetional - https://repl.it/MSfG/2
class node:
def __init__(self, data):
print "creating node: ", data
self.data = data
self.left = None
self.right = None
def insert(self, data):
if self.data > data:
print "go left from:", self.data, " for ", data
if self.left is None:
self.left = node(data)
else:
self.left.insert(data)
else:
print "go right from:", self.data, " for ", data
if self.right is None:
self.right = node(data)
else:
self.right.insert(data)
def preorder(self):
if self.data is not None:
print self.data
if self.left is not None:
self.left.inorder()
if self.right is not None:
self.right.inorder()
def inorder(self):
if self.left is not None:
for key in self.left.inorder():
yield key
if self.data is not None:
yield self.data
if self.right is not None:
for key in self.right.inorder():
yield key
class BST:
def __init__(self, data):
self.root = node(data)
self.size = 1
def insert(self, data):
if self.root is None:
self.root = node(data)
else:
self.root.insert(data)
self.size += 1
def inorder(self):
print "printing tree rooted at: " , self.root.data
if self.root:
self.root.inorder()
def preorder(self):
print "printing preorder tree rooted at: " , self.root.data
if self.root:
self.root.preorder()
def k_largest(self, k):
for i,x in enumerate(self.root.inorder()):
if i == (self.size - k):
return x
return -1
bst = BST(10)
bst.insert(5)
bst.insert(15)
bst.insert(12)
bst.insert(16)
bst.insert(6)
k = 2
print bst.k_largest(k)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment