如何二叉链表存储的二叉树转换为一维数组结构

Python014

如何二叉链表存储的二叉树转换为一维数组结构,第1张

与队列配合操作:

对第 一 层进队;

1.把队头节点的左右节点分别进队,对头节点出队并储存当前数据进数组

2.重复1,直到当前层均为NULL

图例如下:

结果应该是分别是:

广度优先: a ->b ->c ->d ->f ->e ->g

先序遍历: a ->b ->d ->e ->f ->g ->c

中序遍历: e ->d ->b ->g ->f ->a ->c

后序遍历: e ->d ->g ->f ->b ->c ->a

结果存在result里面,如果不存可以少一层变量

这个地方强烈建议读一下下面的第一个链接,我遵照着那篇文章实现的,只是用Go改写了而已。

首先定义一个数据结构,用来存储一些Node的信息。

这里是可以运行的,但是总会抛出一个数组越界的错误,我看了半天也没看出来哪里有问题,Mac版的devel我这边又有bug,没用起来。至少思路对了,我后面再看一下哪里的问题。(感谢 @RiXu 指正)

可以,比如此二叉树:

4

/\

5 8

直接放入数组中为:4 | 5 | 8就行了,如果有空结点,数组中标志为空

查找时按照公式2 * i + 1为左孩子结点,2 * i + 2为右孩子结点。

比如查找根结点4的右孩子元素,则因4在数组第0个位置,故i=0,带入公式2 * i + 2=2,故

4的右孩子元素在数组第二个位置即为8.