将链接的二叉树转换为基于数组的二叉树

问题描述

如何将最初作为链接结构实现的二叉树转换为基于数组的树?

如果二叉树像这样的完整二叉树是没有问题的:

      5
     / \
    /   \
   /     \ 
  3       7
 / \     / \
1   4   6   9

因为我可以使用广度优先遍历在数组中连续添加其节点。

但是如果它是像这样的不完整的树怎么办?

      5
     / \
    /   \
   /     \ 
  3       7
   \     / \
    4   6   9

      5
       \
        \
         \ 
          7
         / \
        6   9

       5
      / \
     /   \
    /     \ 
   3       7
    \  
     4

有些节点没有任何子节点,或者其子节点计数不完全是2。如何将其转换为数组?

如何以这种方式在数组中添加不完整的二叉树示例:

1st: 5 3 7 null 4 6 9
2nd: 5 null 7 null null 6 9
3rd: 5 3 7 null 4 null null

解决方法

为此,我们可以对二进制树进行级别顺序遍历,并进行一些修改。

通常在级别顺序遍历中,我们仅添加不为null的那些树节点,以避免无限循环。但是在这种情况下,由于您要打印所有级别的元素,直到一个级别甚至不包含单个非null节点。

为了实现这一点,我们可以维护一个<button id="gettingStarted" @click="click">Getting started</button> ... import { useRouter } from 'vue-router' export default { setup() { const router = useRouter() const click = () => { router.push({ path: 'target path' }) } return { click } } } 变量,该变量跟踪队列中存在多少个非空节点,如果从中弹出一个非空节点,则count会递减。在队列中,无论父节点为空还是非空,我们都必须同时添加左右节点。

如果弹出的父节点为null,则通过在队列(如果有的话)中将其左,右子级添加为null来单独处理;否则,如果父节点不为null,则减少计数并添加其左,右子级,也递增{ {1}}基于左右节点的非空节点数。(其他部分)

此外,我们还必须与count一起维护特定级别的节点数。我们之所以使用它,是因为如果特定级别的计数变为0,则必须打印该级别上的所有剩余节点(为空)。因此,我们需要知道在该级别上仍然可以存在多少个节点。

这可以从您的示例3来解释。在此级别3(如果根级别在级别1)中,当我们到达值4的节点时,计数将变为0,并且我们将退出循环而没有在该级别打印剩余的节点值(null,null)。为了跟踪每个级别上有多少个节点,我们使用变量countcount

以下是该示例的工作示例:

levelnode