2017-07-26 33 views
0

有一个在代码无压痕问题我正在尝试二叉树的曲折遍历。它不打印最后一个分支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个数据。

回答

0

算法本身很好。
但你已经在你的 “节点添加代码”
你两次设置root.right.left

变化

root.right.left=Node(5) 
root.right.left=Node(4) 

root.right.left=Node(5) 
root.right.right=Node(4) 
+0

@Arseiny犯了一个错误是连我注意到,这样的一个菜鸟的错误。无论如何,谢谢 –