我知道如何递归地执行此操作:
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)
但你怎么会非递归地做呢?无法访问位于左子树右侧的节点。
答案 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
只要您的树中没有任何循环,哪个应该有效。