May-10-2021, 09:21 AM
Quote:This is overall code it return me an error TypeError: __init__() got an unexpected keyword argument 'value'
where return the general tree to find shortest path with and without siblings) from the root to the node, c1.
The follow error this is overall codes
Error:TypeError Traceback (most recent call last)
<ipython-input-77-6f90865f60cf> in <module>
220
221 if __name__ == '__main__':
--> 222 a1 = GeneralTreeNode(value='a1')
223 b1 = GeneralTreeNode(value='b1')
224 b2 = GeneralTreeNode(value='b2')
TypeError: __init__() got an unexpected keyword argument 'value'class GeneralTree():
def __init__(self,root=None):
self.root = root
self.first_born = self.root.get_child()
self.current_node = self.first_born
self.current_value = self.current_node.get_value()
self.start = self.current_value
self.visited = LinkedList(self.root.get_value())
self.path = LinkedList(self.root.get_value())
self.child_path = LinkedList(self.root.get_value())
def check_visited(self,val):
if self.visited.find(val):
return True
else:
return False
def check_child_path(self,val):
if self.child_path.find(val):
return True
else:
return False
def depth_first_traversal(self):
if self.current_value == self.root.get_value():
self.visited.insert_at(idx=1,val=self.start)
# copy self.visited then reset for future method calls
self.completed_visited = self.visited
self.current_node = self.first_born
self.current_value = self.current_node.get_value()
self.start = self.current_value
self.visited = LinkedList(self.root.get_value())
return self.completed_visited.dump_list()
else:
# ==== tree traversal logic ====
if self.current_node.get_child() and self.check_visited(self.current_node.get_child().get_value()) == False:
# parent -> child (not yet visited)
self.current_node = self.current_node.get_child()
self.current_value = self.current_node.get_value()
self.visited.append(self.current_value)
elif self.current_node.get_right() and self.check_visited(self.current_node.get_right().get_value()) == False:
# sibling -> right_sibling (not yet visited)
self.current_node = self.current_node.get_right()
self.current_value = self.current_node.get_value()
self.visited.append(self.current_value)
elif self.current_node.get_right() == None and self.current_node.get_left():
# right_most_sibling -> left_sibling (already visited)
self.current_node = self.current_node.get_left()
self.current_value = self.current_node.get_value()
elif self.current_node.get_left() != None and self.check_visited(self.current_node.get_right().get_value()) == True:
# sibling (not left-most or right-most) -> left_sibling (already visited)
self.current_node = self.current_node.get_left()
self.current_value = self.current_node.get_value()
else:
# left_most_sibling -> parent (already visited)
self.current_node = self.current_node.get_parent()
self.current_value = self.current_node.get_value()
# ==== recursively apply logic ====
self.depth_first_traversal()
def depth_first_search(self,search_val):
self.search_val = search_val
if self.current_value == search_val or self.current_value == self.root.get_value():
self.visited.insert_at(idx=1,val=self.start)
self.path.insert_at(idx=1,val=self.start)
if self.check_visited(self.search_val) == True:
condition = 1
else:
condition = 0
# copy self.path and reset for future method calls
self.completed_path = self.path
self.current_node = self.first_born
self.current_value = self.current_node.get_value()
self.start = self.current_value
self.visited = LinkedList(self.root.get_value())
self.path = LinkedList(self.root.get_value())
if condition == 1:
return self.completed_path.dump_list()
else:
print("Value not found")
else:
# ==== tree traversal logic ====
if self.current_node.get_child() and self.check_visited(self.current_node.get_child().get_value()) == False:
# parent -> child (not yet visited)
self.current_node = self.current_node.get_child()
self.current_value = self.current_node.get_value()
self.visited.append(self.current_value)
self.path.append(self.current_value)
elif self.current_node.get_right() and self.check_visited(self.current_node.get_right().get_value()) == False:
# sibling -> right_sibling (not yet visited)
self.current_node = self.current_node.get_right()
self.current_value = self.current_node.get_value()
self.visited.append(self.current_value)
self.path.append(self.current_value)
elif self.current_node.get_right() == None and self.current_node.get_left():
# right_most_sibling -> left_sibling (already visited)
self.current_node = self.current_node.get_left()
self.current_value = self.current_node.get_value()
elif self.current_node.get_left() != None and self.check_visited(self.current_node.get_right().get_value()) == True:
# sibling (not left-most or right-most) -> left_sibling (already visited)
self.current_node = self.current_node.get_left()
self.current_value = self.current_node.get_value()
self.path.deleteAt(idx=self.path.count)
else:
# left_most_sibling -> parent (already visited)
self.current_node = self.current_node.get_parent()
self.current_value = self.current_node.get_value()
self.path.deleteAt(idx=self.path.count)
# ==== recursively apply logic ====
self.depth_first_search(search_val=self.search_val)
def child_depth_first_search(self,search_val):
self.search_val = search_val
if self.current_value == search_val or self.current_value == self.root.get_value():
self.visited.insert_at(idx=1,val=self.start)
self.path.insert_at(idx=1,val=self.start)
if self.check_visited(self.search_val) == True:
condition = 1
else:
condition = 0
# copy self.path and reset for future method calls
self.completed_child_path = self.child_path
self.current_node = self.first_born
self.current_value = self.current_node.get_value()
self.start = self.current_value
self.visited = LinkedList(self.root.get_value())
self.child_path = LinkedList(self.root.get_value())
if condition == 1:
return self.completed_child_path.dump_list()
else:
print("Value not found")
else:
# ==== tree traversal logic ====
if self.current_node.get_child() and self.check_visited(self.current_node.get_child().get_value()) == False:
# parent -> child (not yet visited)
if self.check_child_path(self.current_node.get_value()) == False:
self.child_path.append(self.current_value)
self.current_node = self.current_node.get_child()
self.current_value = self.current_node.get_value()
self.visited.append(self.current_value)
self.child_path.append(self.current_value)
elif self.current_node.get_right() and self.check_visited(self.current_node.get_right().get_value()) == False:
# sibling -> right_sibling (not yet visited)
self.child_path.deleteAt(idx=self.child_path.count)
self.current_node = self.current_node.get_right()
self.current_value = self.current_node.get_value()
self.visited.append(self.current_value)
self.child_path.append(self.current_value)
elif self.current_node.get_right() == None and self.current_node.get_left():
# right_most_sibling -> left_sibling (already visited)
self.current_node = self.current_node.get_left()
self.current_value = self.current_node.get_value()
elif self.current_node.get_left() != None and self.check_visited(self.current_node.get_right().get_value()) == True:
# sibling (not left-most or right-most) -> left_sibling (already visited)
self.current_node = self.current_node.get_left()
self.current_value = self.current_node.get_value()
self.child_path.deleteAt(idx=self.child_path.count)
else:
# left_most_sibling -> parent (already visited)
self.current_node = self.current_node.get_parent()
self.current_value = self.current_node.get_value()
self.child_path.deleteAt(idx=self.child_path.count)
# ==== recursively apply logic ====
self.child_depth_first_search(search_val=self.search_val)
if __name__ == '__main__':
a1 = GeneralTreeNode(value='a1')
b1 = GeneralTreeNode(value='b1')
b2 = GeneralTreeNode(value='b2')
b3 = GeneralTreeNode(value='b3')
a1.set_child(b1)
b1.set_parent(a1)
b1.set_right(b2)
b2.set_left(b1)
b2.set_right(b3)
b3.set_left(b2)
c1 = GeneralTreeNode(value='c1')
c1.set_parent(b3)
b3.set_child(c1)
d1 = GeneralTreeNode(value='d1')
d1.set_parent(b1)
b1.set_child(d1)
r = GeneralTree(root=a1)
r.depth_first_search(search_val='c1')
r.child_depth_first_search(search_val='c1')
