在没有递归Python的情况下计算二叉树的节点

时间:2015-04-13 00:49:43

标签: python tree binary-tree

我知道如何递归地执行此操作:

def num_nodes(tree):
if not tree.left and not tree.right:
    return 1
else:
    return 1 + num_nodes(tree.left) + num_nodes(tree.right)

但你怎么会非递归地做呢?无法访问位于左子树右侧的节点。

1 个答案:

答案 0 :(得分:0)

您可以将您必须执行的节点存储在列表中。

queue = []
count = 0
queue.append(root)
# Above is start of tree

while(queue):
  if queue[0].left:
    queue.append(queue[0].left)
  if queue[0].right:
    queue.append(queue[0].right)
  queue.pop(0)
  count += 1

只要您的树中没有任何循环,哪个应该有效。