代码之家  ›  专栏  ›  技术社区  ›  Gurmeet Singh

我正在尝试二叉树的之字形遍历。它没有打印最后一个分支的5,为什么?

  •  0
  • Gurmeet Singh  · 技术社区  · 8 年前

        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,二,3,四,5,六,7]。有人能解释为什么它没有从树的最后一根树枝上附加5吗

    1 回复  |  直到 7 年前
        1
  •  0
  •   Laser    8 年前


    但是您在“节点添加代码”中犯了一个错误
    您正在设置 root.right.left

    改变

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

    root.right.left=Node(5)
    root.right.right=Node(4)
    
    推荐文章