将二叉树存储在计算机内存中

时间:2015-04-29 03:50:26

标签: algorithm binary-tree

下表表示存储在计算机内存中的树。树的每个节点包含三个单元。第一个单元包含要存储的数据;第二个单元格包含指向第一个单元格的左子节点的指针,第三个单元格包含指向第一个单元格的右子节点的指针。作为指针的值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

我知道如何解决这个问题。但有没有人有任何想法来解决这个问题

2 个答案:

答案 0 :(得分:1)

以下是解决方案:

enter image description here

它是使用python tree.py | dot -T png a.png

从此Python代码生成的
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个字节。然后按这样下去,直到你没有更多指针跟随(结束节点可以有一个值,但结束节点的第二个和第三个字节为空)。

相关问题