在Python中构建高度为'h'的完整二叉树时出现问题

时间:2010-04-08 13:56:10

标签: python

这是我的代码。完整的二叉树在深度k处具有2 ^ k个节点。

class Node:

    def __init__(self, data):
        # initializes the data members
        self.left = None
        self.right = None
        self.data = data


root = Node(data_root)

def create_complete_tree():
        row = [root]

        for i in range(h):

            newrow = []
            for node in row:
                left = Node(data1)  
                right = Node(data2)  

                node.left = left
                node.right = right

                newrow.append(left)
                newrow.append(right)


            row = copy.deepcopy(newrow)



def traverse_tree(node):
        if node == None:
            return
        else:
            traverse_tree(node.left)
            print node.data
            traverse_tree(node.right)

create_complete_tree()

print 'Node traversal'

traverse_tree(root)

树遍历仅提供root及其子项的数据。我做错了什么?

1 个答案:

答案 0 :(得分:2)

这里的主要问题是您在临时列表中使用深度复制。考虑每次迭代会发生什么:

  1. 检查您的初始根,并创建子节点
  2. 这些子节点放在newrow
  3. 将这些子节点的副本复制到行中以进行下一次迭代。
  4. 这意味着后续迭代不会改变您创建的节点(以及root.left和root.right指向的节点),而是它们的副本,使原始状态保持为当前状态(使用None .left.right