示例输入:
["5","2","6","1","9","#","8","#","#","#","#","4","#"]
,其中#
是树中不存在的节点
我的输出应该是预定遍历的结果:
5 2 1 9 6 8 4
到目前为止,除最后一个节点外,我都成功了,但索引超出了范围。 到目前为止,这是我的代码:
def traverse(strArr):
strArr.insert(0, '#')
def preorder(arr, ind):
if ind <= len(arr) and arr[ind] != '#':
print(arr[ind])
preorder(arr, 2*ind)
preorder(arr, 2*ind+1)
preorder(strArr, 1)
traverse(["5","2","6","1","9","#","8","#","#","#","#","4","#"])
为了使最后一个节点(在本例中为4个)无错误显示,我需要更改什么?
答案 0 :(得分:1)
有两个问题。
if ind <= len(arr) and arr[ind] != '#':
允许ind
成为len(arr)
,它比arr
的最后一个元素的索引大。在同一行中,您使用ind
作为索引来访问数组arr[ind]
,这将导致IndexError
。此处的解决方法是检查ind
是否小于 len(arr)
:if ind < len(arr) and arr[ind] != '#':
4
的索引错误:
当前位于索引11
,但应位于索引13
。在此处修复:traverse(["5","2","6","1","9","#","8","#","#","#","#","#","#","4","#"])