c - 堆二叉树

标签 c algorithm search heap binary-tree

我正在学习堆,但我很难理解你应该如何移动每个节点。我将在下面给你一个示例树:

          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/

相关文章:

javascript - 如何编写分组算法,通过具有 3 个或更多相似属性对数据集中的项目进行分组

c# - 反向抛光表示法 C# 无法正常工作

powershell - 如何使用Powershell定位指定的目录?

mysql - 在mysql中搜索大量不断更新的文本

search - Squid + squidGuard 未在 duckduckgo.com 上强制执行安全搜索

c - 编码文本和文件写入读取错误

c - 如何在 Makefile 中实现 "make install"?

algorithm - 重复:T(n) = (2+1/log n)T(n/2)

c - GNU 内联汇编程序——汇编指令的语法?

c - 可以假设哪些依赖项安装在构建机器上?