用一维数组构建不完全二叉树
Posted 娜驿站
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用一维数组构建不完全二叉树相关的知识,希望对你有一定的参考价值。
前言
leetcode
中的题目时,经常会出现利用二叉树解题的情况,但leetcode
给出的只是一个一维数组,而且这个一维数组是按照二叉树的水平层级排列,比如给出一个一维数组为:[1,2,3,4,5,null,6,7,null,null,null,null,8]
,它对应的二叉树如下图所示:
leetcode
内置了将这种一维数组转换为二叉树的函数,但我们自己在测试程序的过程中,并没有现成的转换函数帮我们实现这种转换,这一篇来研究一下
leetcode
中的这种内置转换函数是怎么编写的。
实现一维数组到二叉树的转换
i
个元素与第2i+1
和2i+2
个元素构成父子节点,但当一个一维数组中的元素无法构成满二叉树时,我们需要对其每个元素进行判断,比如leetcode
给出的null
元素,就意味着该元素对应的节点是个空节点,这个空节点当然不会再拥有子节点,因此,此时由该一维数组构成的二叉树不能再以2i+1
和2i+2
的规律来寻找其子节点。
node
变量即是二叉树的根节点。
二叉树的前序遍历
将二叉树打印成二维图形
将二叉树转换为二维数组
将二叉树按垂直方式打印
numpy
的数组转置功能,但我们只是想将数组顺时针旋转90度,所以在转置之前,先将大数组反向排列一下:
typora
软件的mermaid
绘图代码,我们可以直接将上述图形生成绘图代码,来展示出本文一开始的图形。
将二叉树生成绘图代码
Typora
在本公众号之前有介绍过,它是markdown
格式的所见即所得编辑器,也是我最喜欢的文字编辑器之一,为了利用其mermaid
绘图功能,用Python
来自动生成相关代码如下:
Typora
中,即可得到
前言
中所列图形:
mermaid
代码复制到typora
中可得图形:
小结
以上是关于用一维数组构建不完全二叉树的主要内容,如果未能解决你的问题,请参考以下文章
已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。试设计一个算法,从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。