0% found this document useful (0 votes)
13 views

Implementing Tree and Linked List

Python Code code for Implementing Tree and Linked List

Uploaded by

Nurul Huda Toyon
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views

Implementing Tree and Linked List

Python Code code for Implementing Tree and Linked List

Uploaded by

Nurul Huda Toyon
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

12/1/22, 1:08 AM Implementing Tree and Linked List

In [1]: #first creating class called Node. For tree it has two component Root node node and tw

class Node(object):
def __init__(self,value):
self.value = value
self.left = None
self.right = None

class Binarytree(object):
def __init__(self,root):
self.root = Node(root)

root_node = Binarytree(1)
root_node.left = Binarytree(2)
root_node.right = Binarytree(2)

In [10]: #adding element to the tree


class Node:
def __init__(self,value):
self.value = value
self.left = None
self.right = None

def add_node(self, value):


if value == self.value:
return # node already exist

if value < self.value:


if self.left:
self.left.add_node(value)
else:
self.left = Node(value)
else:
if self.right:
self.right.add_node(value)
else:
self.right = Node(value)

def in_order_traversal(self):

elements = []

if self.left:
elements += self.left.in_order_traversal()

elements.append(self.value)

if self.right:
elements += self.right.in_order_traversal()
return elements

def pre_order_traversal(self):

elements = []

elements.append(self.value)
localhost:8888/nbconvert/html/Desktop/Implementing Tree and Linked List.ipynb?download=false 1/6
12/1/22, 1:08 AM Implementing Tree and Linked List

if self.left:
elements += self.left.pre_order_traversal()

if self.right:
elements += self.right.pre_order_traversal()

return elements

def post_order_traversal(self):

elements = []

if self.left:
elements += self.left.post_order_traversal()

if self.right:
elements += self.right.post_order_traversal()
elements.append(self.value)

return elements

def search(self,val):

if val == self.value:
return True
if val < self.value:

if val == self.left.search(val):
return True
else:
return False

if val > self.value:

if val == self.right.search(val):
return True
else:
return False

def find_min(self):
if self.left is None:
return self.value
return self.left.find_min()

def find_max(self):
if self.right is None:
return self.value
return self.right.find_max()

def delete(self,val):
if val < self.value:
if self.left:
self.left = self.left.delete(val)
elif val > self.value:
if self.right:
self.right = self.right.delete(val)
else:
if self.left is None and self.right is None:
localhost:8888/nbconvert/html/Desktop/Implementing Tree and Linked List.ipynb?download=false 2/6
12/1/22, 1:08 AM Implementing Tree and Linked List

return None

if self.left is None:
return self.right
if self.right is None:
return self.left

min_val = self.right.find_min()
self.value = min_val
self.right = self.right.delete(min_val)
return self

def build_tree(elements):
print("Building tree with these elements:",elements)
root = Node(elements[0])

for i in range(1,len(elements)):
root.add_node(elements[i])
return root

if __name__ == '__main__':

numbers_tree = build_tree([17, 4, 1, 20, 9, 23, 18, 34])


print("In order traversal gives this sorted list:",numbers_tree.in_order_traversal
print("Pre order traversal gives this sorted list:",numbers_tree.pre_order_travers
print("Post order traversal gives this sorted list:",numbers_tree.post_order_trave
print("Is a particular value in the tree? =",numbers_tree.search(1))
print("Fidng the min value in the tree? =",numbers_tree.find_min())
print("Fidng the max value in the tree? =",numbers_tree.find_max())
numbers_tree.delete(17)
print("After deleting 17 ",numbers_tree.in_order_traversal()) # this should print

Building tree with these elements: [17, 4, 1, 20, 9, 23, 18, 34]
In order traversal gives this sorted list: [1, 4, 9, 17, 18, 20, 23, 34]
Pre order traversal gives this sorted list: [17, 4, 1, 9, 20, 18, 23, 34]
Post order traversal gives this sorted list: [1, 9, 4, 18, 34, 23, 20, 17]
Is a particular value in the tree? = True
Fidng the min value in the tree? = 1
Fidng the max value in the tree? = 34
After deleting 17 [1, 4, 9, 18, 20, 23, 34]

In [29]: Node(2)
print(add_node)

<function add_node at 0x00000229B55705E0>

BFS
In [18]: import collections

graph = {
'5' : ['3','7'],
'3' : ['2', '4'],
'7' : ['8'],
'2' : [],
'4' : [],
'8' : []
}

localhost:8888/nbconvert/html/Desktop/Implementing Tree and Linked List.ipynb?download=false 3/6


12/1/22, 1:08 AM Implementing Tree and Linked List

def bfs(graph):
visited = []
queue = collections.deque('5')
while queue:
node = queue.popleft()
# print (node, end = " ")
visited.append(node)
for x in graph[node]:
queue.append(x)
return print(visited)

In [19]: bfs(graph)

['5', '3', '7', '2', '4', '8']

In [28]: graph = {
'5' : ['3','7'],
'3' : ['2', '4'],
'7' : ['8'],
'2' : [],
'4' : [],
'8' : []
}

visited = [] # List for visited nodes.


queue = [] #Initialize a queue

def bfs(visited, graph, node): #function for BFS


visited.append(node)
queue.append(node)

while queue: # Creating loop to visit each node


m = queue.pop(0)
print (m, end = " ")

for neighbour in graph[m]:


if neighbour not in visited:
visited.append(neighbour)
queue.append(neighbour)

# Driver Code
print("Following is the Breadth-First Search")
bfs(visited, graph, '5') # function calling

Following is the Breadth-First Search


5 3 7 2 4 8

DFS
In [20]: graph = {
'5' : ['3','7'],
'3' : ['2', '4'],
'7' : ['8'],
'2' : [],
'4' : [],

localhost:8888/nbconvert/html/Desktop/Implementing Tree and Linked List.ipynb?download=false 4/6


12/1/22, 1:08 AM Implementing Tree and Linked List
'8' : []
}

def dfs(graph):
visited = []
stack = ['5']
while stack:
node = stack.pop()
if node not in visited:
visited.append(node)
for x in graph[node]:
stack.append(x)
return print(visited)

In [21]: dfs(graph)

['5', '7', '8', '3', '4', '2']

In [24]: # Using a Python dictionary to act as an adjacency list


graph = {
'5' : ['3','7'],
'3' : ['2', '4'],
'7' : ['8'],
'2' : [],
'4' : [],
'8' : []
}

visited = set() # Set to keep track of visited nodes of graph.

def dfs(visited, graph, node): #function for dfs


if node not in visited:
print (node)
visited.add(node)
for neighbour in graph[node]:
dfs(visited, graph, neighbour)
# return print(visited)
# Driver Code
print("Following is the Depth-First Search")
dfs(visited, graph, '5')

Following is the Depth-First Search


5
3
2
4
7
8

Recursion
In [1]: def factorial(data):
if data == 1:
return data
else:
return data*factorial(data-1)

localhost:8888/nbconvert/html/Desktop/Implementing Tree and Linked List.ipynb?download=false 5/6


12/1/22, 1:08 AM Implementing Tree and Linked List

In [2]: factorial(5)

120
Out[2]:

In [ ]: class Node(odject):
def __init__ (self,val,left,right):
self.val = val
self.left = None
self.right = None
class BinaryTree(root):
self.root = Node(root)
self.left = left
self.right = right

root = BinaryTree(root)
root.left = left

localhost:8888/nbconvert/html/Desktop/Implementing Tree and Linked List.ipynb?download=false 6/6

You might also like