下表表示存储在计算机内存中的树。树的每个节点包含三个单元。第一个单元包含要存储的数据;第二个单元格包含指向第一个单元格的左子节点的指针,第三个单元格包含指向第一个单元格的右子节点的指针。作为指针的值00表示nil指针。单独的变量指向树的根。树的根是从4F开始的单元格;也就是说,保存根指针的变量的值为4F。填写结果树。绘制生成树的图片。 (使用打字机图形绘制二叉树图片的一种方法是使用/表示左指针,\表示右指针。您可以在下一个问题中看到一个示例。)
Address Contents
40 A1
41 00
42 00
43 B2
44 00
45 00
46 D4
47 49
48 00
49 C3
4A 00
4B 00
4C E5
4D 43
4E 40
4F F6
50 46
51 4C
我知道如何解决这个问题。但有没有人有任何想法来解决这个问题
答案 0 :(得分:1)
以下是解决方案:
它是使用python tree.py | dot -T png a.png
data = """
40 A1
41 00
42 00
43 B2
44 00
45 00
46 D4
47 49
48 00
49 C3
4A 00
4B 00
4C E5
4D 43
4E 40
4F F6
50 46
51 4C""".split("\n")
data = [line.split() for line in filter(None, data)]
data = dict(map((lambda x: int(x, 16)), line) for line in data)
def print_tree(data, p):
print ' n%x [label="%d"];' % (p, data[p])
for c in data[p+1], data[p+2]:
if not c: continue
print_tree(data, c)
print ' n%x -> n%x;' % (p, c)
print 'digraph tree {'
print_tree(data, 0x4f)
print '}'
答案 1 :(得分:0)
第一个节点位于地址[value=F6, leftChildAddr=46, rightChildAddr=4C]
,因此根节点为46
。然后读取3个字节长的左子节点,并从地址Container
开始。然后读取右子节点的3个字节。然后按这样下去,直到你没有更多指针跟随(结束节点可以有一个值,但结束节点的第二个和第三个字节为空)。