Skip to content

Commit 27d70b5

Browse files
Tree- Depth first search
1 parent 66cac32 commit 27d70b5

File tree

1 file changed

+144
-0
lines changed

1 file changed

+144
-0
lines changed

depth-first-search-tree.py

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
# post-order traversal
2+
3+
class Node:
4+
def __init__(self,value=None):
5+
self.value = value
6+
self.right = None
7+
self.left = None
8+
def set_value(self, value=None):
9+
self.value = value
10+
def get_value(self):
11+
return self.value
12+
def get_right_child(self):
13+
return self.right
14+
def get_left_child(self):
15+
return self.left
16+
def set_left_child(self, value):
17+
self.left = value
18+
def set_right_child(self, value):
19+
self.right = value
20+
def has_left_child(self):
21+
return self.left != None
22+
def has_right_child(self):
23+
return self.right != None
24+
25+
class Tree:
26+
def __init__(self, value=None):
27+
self.root = Node(value)
28+
def get_root(self):
29+
return self.root
30+
31+
class State:
32+
def __init__(self, node):
33+
self.node = node
34+
self.visited_left = False
35+
self.visited_right = False
36+
def get_node(self):
37+
return self.node
38+
def get_visited_left(self):
39+
return self.visited_left
40+
def get_visited_right(self):
41+
return self.visited_right
42+
def set_visited_left(self):
43+
self.visited_left = True
44+
def set_visited_right(self):
45+
self.visited_right = True
46+
47+
48+
tree = Tree("apple")
49+
tree.get_root().set_left_child(Node("banana"))
50+
tree.get_root().set_right_child(Node("cherry"))
51+
tree.get_root().get_left_child().set_left_child(Node("dates"))
52+
53+
class Stack:
54+
def __init__(self):
55+
self.list = list()
56+
def push(self, value):
57+
self.list.append(value)
58+
def pop(self):
59+
return self.list.pop()
60+
def top(self):
61+
if len(self.list) > 0:
62+
return self.list[-1]
63+
else:
64+
return None
65+
def is_empty(self):
66+
return len(self.list) == 0
67+
68+
69+
def pre_order_traversal_with_stack(tree):
70+
stack = Stack()
71+
visit_order = list()
72+
node = tree.get_root()
73+
state = State(node)
74+
stack.push(state)
75+
visit_order.append(node.get_value())
76+
count = 0
77+
while (node):
78+
count+=1
79+
if node.has_left_child() and not state.get_visited_left():
80+
state.set_visited_left()
81+
node = node.get_left_child()
82+
state = State(node)
83+
stack.push(state)
84+
visit_order.append(node.get_value())
85+
elif node.has_right_child() and not state.get_visited_right():
86+
state.set_visited_right()
87+
node = node.get_right_child()
88+
state = State(node)
89+
stack.push(state)
90+
visit_order.append(node.get_value())
91+
else:
92+
stack.pop()
93+
if not stack.is_empty():
94+
state = stack.top()
95+
node = state.get_node()
96+
else:
97+
node = None
98+
return visit_order
99+
def pre_order_traversal_with_recursion(tree):
100+
node = tree.get_root()
101+
visit_order = list()
102+
def traverse(node):
103+
if node:
104+
# visit
105+
visit_order.append(node.get_value())
106+
# traverse left
107+
traverse(node.get_left_child())
108+
# traverse right
109+
traverse(node.get_right_child())
110+
traverse(node)
111+
return visit_order
112+
def inorder_traversal_with_recursion(tree):
113+
node = tree.get_root()
114+
visit_order = list()
115+
def traverse(node):
116+
if node:
117+
# traverse left
118+
traverse(node.get_left_child())
119+
# visit
120+
visit_order.append(node.get_value())
121+
# traverse right
122+
traverse(node.get_right_child())
123+
traverse(node)
124+
return visit_order
125+
def post_order_traversal_with_recusrion(tree):
126+
node = tree.get_root()
127+
visit_order = list()
128+
def traversal(node):
129+
if node:
130+
# traverse left
131+
traversal(node.get_left_child())
132+
# traverse right
133+
traversal(node.get_right_child())
134+
# visit
135+
visit_order.append(node.get_value())
136+
traversal(node)
137+
return visit_order
138+
139+
140+
print(post_order_traversal_with_recusrion(tree))
141+
142+
143+
144+

0 commit comments

Comments
 (0)