我正在学习堆,但我很难理解你应该如何移动每个节点。我将在下面给你一个示例树:
1
/ \
2 3
/ \ / \
4 5 6 7
/ \ /
8 9 10
这就是我的树。我正在尝试将 10 个节点连接到该节点,但不明白我所采取的步骤。我会先看看树的底部吗?这是我的尝试:
1
/ \
2 3
/ \ / \
4 5 6 7
/ \ /
8 9 10
-> Move ten up and the two down.
1
/ \
10 3
/ \ / \
4 5 6 7
/ \ /
8 9 2
-> Move the 9 up
1
/ \
10 3
/ \ / \
9 5 6 7
/ \ /
8 4 2
-> move the 7 up
1
/ \
10 7
/ \ / \
9 5 6 3
/ \ /
8 4 2
-> Move the whole left side up and bring the 1 down.
10
/ \
9 7
/ \ / \
8 5 6 3
/ \ /
1 4 2
这就是我最终得到的结果,但我有一种感觉这是不对的,因为它不是一棵有序树。有人可以帮助我理解我哪里出错了吗?
最佳答案
堆不是有序二叉树。堆保留的唯一顺序是任何子节点都小于(或等于)其父节点。树中同一级别的子节点相对于彼此可以按任何顺序。
关于c - 堆二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19781636/