Created
October 9, 2017 08:10
-
-
Save vetional/94be0a23f496485258abbf3f84a9fb7f to your computer and use it in GitHub Desktop.
Kth largest in BST created by vetional - https://repl.it/MSfG/2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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