在计算机内存中存储二叉树
Storing a Binary Tree in computer memory
下面的table表示计算机内存中存储的一棵树。树的每个节点包含三个单元格。第一个单元格包含要存储的数据;第二个单元格包含指向第一个单元格左子节点的指针,第三个单元格包含指向第一个单元格右子节点的指针。作为指针的值 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
我知道如何解决这个问题。但是有没有人有解决这个问题的想法
第一个节点在地址4F
,所以根节点是[value=F6, leftChildAddr=46, rightChildAddr=4C]
。然后读取从地址46
开始的3个字节长的左子节点。然后读取右子节点的3个字节。就这样往下走,直到没有指针可以跟随(结束节点可以有值,但是结束节点的第二个和第三个字节为空)。
解决方法如下:
它是从这个 Python 代码生成的,使用 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 '}'
下面的table表示计算机内存中存储的一棵树。树的每个节点包含三个单元格。第一个单元格包含要存储的数据;第二个单元格包含指向第一个单元格左子节点的指针,第三个单元格包含指向第一个单元格右子节点的指针。作为指针的值 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
我知道如何解决这个问题。但是有没有人有解决这个问题的想法
第一个节点在地址4F
,所以根节点是[value=F6, leftChildAddr=46, rightChildAddr=4C]
。然后读取从地址46
开始的3个字节长的左子节点。然后读取右子节点的3个字节。就这样往下走,直到没有指针可以跟随(结束节点可以有值,但是结束节点的第二个和第三个字节为空)。
解决方法如下:
它是从这个 Python 代码生成的,使用 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 '}'