我正在尝试二叉树的曲折遍历。它不打印最后一个分支5,有人可以告诉我为什么?
问题描述:
有一个在代码无压痕问题我正在尝试二叉树的曲折遍历。它不打印最后一个分支5,有人可以告诉我为什么?
class Node:
def __init__(self,key):
self.data=key
self.left=None
self.right=None
def zig_zag(root):
if not root:
return
s=[]
l=1
s.append(root)
while s:
q=[]
if l%2==1:
for i in reversed(s):
print(i.data,end=' ')
if i.left:q.append(i.left)
if i.right:q.append(i.right)
else:
for i in s:
print(i.data,end=' ')
if i.left:q.append(i.left)
if i.right:q.append(i.right)
print(q)
s=q
l+=1
root=Node(1)
root.left=Node(2)
root.right=Node(3)
root.left.left=Node(7)
root.left.right=Node(6)
root.right.left=Node(5)
root.right.left=Node(4)
zig_zag(root)
我得到的输出是[1,2,3,4,6,7]而非[1,2,3,4,5,6 ,7]。任何人都可以解释为什么它不从树的最后一个分支追加5个数据。
答
算法本身很好。
但你已经在你的 “节点添加代码”
你两次设置root.right.left
变化
root.right.left=Node(5)
root.right.left=Node(4)
到
root.right.left=Node(5)
root.right.right=Node(4)
@Arseiny犯了一个错误是连我注意到,这样的一个菜鸟的错误。无论如何,谢谢 –