+ 1
here in the below code bit at line 11,i amconfusing at p=self.parent ,but here self is root,as root parent is none
in the code bit in line 11 it is showing that p=self.parent but self here is root and root will not have parent so it is null.but the code is working in finding level. please explain the code
4 Answers
+ 1
class TreeNode:
def __init__(self,data):
self.data = data
self.children = []
self. parent = None
def add_child(self,child):
child.parent = self
self.children.append(child)
def get_level(self):
level = 0
p = self.parent
while p :
p = p.parent
level += 1
return level
def print_tree(self):
print(' '*self.get_level() + '|--', end = '')
print(self.data)
if self.children:
for each in self.children:
each.print_tree()
def run():
root = TreeNode('Eletronics')
laptop = TreeNode('Laptop')
root.add_child(laptop)
root.print_tree()
run()
+ 1
CHENNAMSETTY SUMANTH ,
Insert a print statement, and you'll see.
def get_level(self):
level = 0
p = self.parent
while p :
p = p.parent
level += 1
print(f"p {p}, level {level}") # testing
return level
Or use this playground to step through the code and see all variables change.
https://pythontutor.com/JUMP_LINK__&&__python__&&__JUMP_LINK-compiler.html#mode=edit
Paste your code in the bottom window.
Click Visualize Execution.
Click Next >.
Click Next >.
etc.
0
CHENNAMSETTY SUMANTH ,
I say it's working as expected.
When self is root,
p == None, (you can verify it with print(p)),
while p: evaluates False,
get_level returns 0,
and ' ' is printed 0 times.
None isn't really the same as null. None is a singleton object that can be passed around that is used to represent the absence of a value, even though it's a thing. The truthiness of None is falsish when used in a condition, so it does what you want.
while None:
pass # never executes
https://docs.python.org/3/c-api/none.html#the-none-object
https://docs.python.org/3/reference/datamodel.html#none
0
Bro..it is exciting and p=p.patent also still working