python中的树遍历打印子节点后如何确定父节点
在下面的代码中,树有5个元素,其中A有(B,C)和B有(D,E),我的问题是在打印最后一个元素之后,该节点是D。在下面的代码中,节点如何切换到“B”,有人能解释一下这个代码吗python中的树遍历打印子节点后如何确定父节点,python,binary-tree,Python,Binary Tree,在下面的代码中,树有5个元素,其中A有(B,C)和B有(D,E),我的问题是在打印最后一个元素之后,该节点是D。在下面的代码中,节点如何切换到“B”,有人能解释一下这个代码吗 class trees(object): def __init__(self,name,left=None,right=None): self.name = name self.left = None self.right = None de
class trees(object):
def __init__(self,name,left=None,right=None):
self.name = name
self.left = None
self.right = None
def inorderTraversal(root):
res = []
if root:
res = inorderTraversal(root.left)
print root.name
res = res + inorderTraversal(root.right)
t1=trees('A')
t2=trees('B')
t3=trees('C')
t4=trees('D')
t5=trees('E')
t1.left = t2
t1.right = t3
t2.left= t4
t2.right = t5
inorderTraversal(t1)
#prints D,B,E,A,C
这很简单
与其说在打印“B”之后会发生什么,不如说在打印“B”之前会发生什么
让我们考虑在包含“B”的节点之前的根<代码> T2<代码>(也许你甚至可以减少你的树只包含T2、T4和T5。这应该更有启发性)。接下来会发生以下情况:
根为None
的计算结果为false。因此,在子级上不会发生任何事情,我们遍历到根,打印它的名称,然后向下遍历到它的子级,在那里不会再发生任何事情
关于您的评论:您的代码确保当您打印“D”时,由于递归,您也将在之后打印“B” 假设我们只有树(t2,(t4,t5)),我们调用
inorderTraversal(t2)
:
发生了什么(删除不必要的res后):
if t2: (True)
inorderTraversal(t4)
print 'B'
inorderTraversal(t5)
print 'D'
print 'B'
inorderTraversal(t5)
让我们考虑在包含“B”的节点之前的根<代码> T2<代码>(也许你甚至可以减少你的树只包含T2、T4和T5。这应该更有启发性)。接下来会发生以下情况:
根为None
的计算结果为false。因此,在子级上不会发生任何事情,我们遍历到根,打印它的名称,然后向下遍历到它的子级,在那里不会再发生任何事情
关于您的评论:您的代码确保当您打印“D”时,由于递归,您也将在之后打印“B” 假设我们只有树(t2,(t4,t5)),我们调用
inorderTraversal(t2)
:
发生了什么(删除不必要的res后):
if t2: (True)
inorderTraversal(t4)
print 'B'
inorderTraversal(t5)
print 'D'
print 'B'
inorderTraversal(t5)
打印“D”后,根现在是t4,但如何打印“B”。例如,在点2中,t2现在何时发生变化?添加了另一个代码示例。但是,您真的熟悉递归吗?这是这里唯一发生的事情,我想这就是递归的工作原理。不再在t2上调用遍历函数,而是仅在其子级上执行命令。所以t2没有看到它的左和右子级是
None
,因为它们不是。顺便说一句,你应该去掉res,因为它完全不起任何作用,而且可能会使事情变得更复杂。注意,我使用了inorderTraversal(None),它什么也不起作用!因此,在第三步中,我们可以打印“D”和“B”,然后我们需要遍历到t4。打印“D”后,根现在是t4,但如何打印“B”。例如,在点2中,t2现在何时发生更改?2添加了另一个代码示例。但是,您真的熟悉递归吗?这是这里唯一发生的事情,我想这就是递归的工作原理。不再在t2上调用遍历函数,而是仅在其子级上执行命令。所以t2没有看到它的左和右子级是None
,因为它们不是。顺便说一句,你应该去掉res,因为它完全不起任何作用,而且可能会使事情变得更复杂。注意,我使用了inorderTraversal(None),它什么也不起作用!所以在第三步中,我们可以打印“D”和“B”,然后我们需要遍历到t4。