根据上面的基础知识我画了一个归总的图(这样我就不需要写文字介绍了,啊哈哈):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zd87TfMP-1637304075403)(https://user-gold-cdn.xitu.io/2018/5/4/16329ce71e6b0fec?imageView2/0/w/1280/h/960/ignore-error/1)]
树结构特点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6WADqgvh-1637304075439)(https://user-gold-cdn.xitu.io/2018/5/4/16329ce6fd9b651e?imageView2/0/w/1280/h/960/ignore-error/1)]
还是用自己画的图来说明:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ciM9luTE-1637304075441)(https://user-gold-cdn.xitu.io/2018/5/4/16329ce6dc4ce0cc?imageView2/0/w/1280/h/960/ignore-error/1)]
存储结构
在Android技能树 — 数组,链表,散列表基础小结中,我们介绍了线性存储,链式存储,我们的树可以充分用二者来结合表示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cO4iSddR-1637304075442)(https://user-gold-cdn.xitu.io/2018/5/4/16329ce70245d2d7?imageView2/0/w/1280/h/960/ignore-error/1)]
我们统一来用上面各种方式来表示下面这个树的存储结构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z1xI3x0u-1637304075443)(https://user-gold-cdn.xitu.io/2018/5/4/16329ce718966c44?imageView2/0/w/1280/h/960/ignore-error/1)]
双亲表示法:
在每个结点中,附设一个指示器指示其双亲结点在数组中的位置。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z0bfzqPo-1637304075443)(https://user-gold-cdn.xitu.io/2018/5/4/16329ce71e4ac1d5?imageView2/0/w/1280/h/960/ignore-error/1)]
因为有十一个结点,所以我们的index为0-10,然后index位置中存储(data + parent的index值),结果如下图所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aJV69ged-1637304075444)(https://user-gold-cdn.xitu.io/2018/5/4/16329ce739f0a4a3?imageView2/0/w/1280/h/960/ignore-error/1)]
这里我们发现根据index里面的parent指针,很容易知道父结点,但是比如我问知道了E结点,想知道它的子结点是哪几个,就不知道了,只能通过整个结构的遍历。
当然我们可以变相的 多加一个指针:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qlE6u73v-1637304075445)(https://user-gold-cdn.xitu.io/2018/5/4/16329ce7228e20f6?imageView2/0/w/1280/h/960/ignore-error/1)]
如果我们又比较关注兄弟结点之间的关系,可以增加一个右兄弟域来体现兄弟关系:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jc9HBddT-1637304075446)(https