如何将最初作为链接结构实现的二叉树转换为基于数组的树?
如果二叉树像这样的完整二叉树是没有问题的:
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
答案 0 :(得分:1)
为此,我们可以对二进制树进行级别顺序遍历,并进行一些修改。
通常在级别顺序遍历中,我们仅添加不为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)。为了跟踪每个级别上有多少个节点,我们使用变量count
和count
。
以下是该示例的工作示例:
levelnode