2. Binary Search Tree Insert
class Node:
def __init__(self,val):
self.left=None
self.right=None
self.val=val
def insertBST(root,node):
if root==None:
root=node
else:
if root.val>node.val:
if root.left==None:
root.left=node
else:
insertBST(root.left,node)
else:
if root.right==None:
root.right=node
else:
insertBST(root.right,node)
def inorder(root):
if root:
inorder(root.left)
print root.val
inorder(root.right)
head=root=Node(1)
node1=Node(2)
node2=Node(3)
node3=Node(4)
node4=Node(2)
insertBST(root,node1)
insertBST(root,node2)
insertBST(root,node3)
insertBST(root,node4)
def main():
inorder(head)
if __name__=="__main__":
main()
3. Two ordered array find the k-th largest
def findk(A,m,B,n,k):
if m>n:
return findk(B,n,A,m,k)
if m==0:
return B[k-1]
if k==1:
return min(A[0],B[0])
pa=min(k/2,m)
pb=k-pa
if A[pa-1]<B[pb-1]:
return findk(A[pa:],m-pa,B,n,k-pa)
else:
return findk(A,m,B[pb:],n-pb,k-pb)
return A[pa-1]
def main():
num1=[1,1,2,9,98]
num2=[30,31,298]
m=len(num1)-1
n=len(num2)-1
result=findk(num1,m,num2,n,5)
print result
if __name__=="__main__":
main()
</pre><pre name="code" class="python">
4.DFS BFS
CFABDE
graph = {'A': set(['B', 'C']),
'B': set(['A', 'D', 'E']),
'C': set(['A', 'F']),
'D': set(['B']),
'E': set(['B', 'F']),
'F': set(['C', 'E'])}
#print graph
def dfs(graph,start):
visited=set()
stack=[start]
while stack:
vertex=stack.pop()
if vertex not in visited:
visited.add(vertex)
stack.extend(graph[vertex]-visited)
return visited
def bfs(graph,start):
visited=set()
que=[start]
while que:
vertex=que.pop(0)
if vertex not in visited:
visited.add(vertex)
que.extend(graph[vertex]-visited)
return visited