有哪些算法可以逐步构建没有订单约束的平衡二叉树?

时间:2013-06-11 04:36:23

标签: algorithm tree

我有兴趣获取元素列表并将它们转换为平衡的二叉树,其中每个元素都在树的叶子上。此外,我想用一种算法构建树,该算法一次只能看到一个元素,而不是一次看到整个列表。最后,这棵树有 no 排序约束---也就是说,它不是搜索树,所以节点可以是任何顺序。

我的问题是:有很多算法可以逐步构建二叉搜索树,但是有哪些算法用于构建平衡的二叉树而没有任何排序约束?它们应该更有效率,因为它们不必担心保留节点之间的任何顺序关系。

1 个答案:

答案 0 :(得分:1)

你可以在线性时间内完成。对于每2个元素,您需要父元素。对于其中的每两个,你需要另一个,依此类推。但是不能做得更好。

首先,为每个数据点创建N个节点 - 然后你就开始重新开始工作 - 将每个两个叶子与一个节点连接在一起,然后将每个父节点中的两个连接在一起等,直到你达到1节点。

或者你可以按照自己的方式工作 - 在任何级别你都可以得到2 ^ N个孩子。

nodes = [...data...]

root = data.first; <== returns first element without removing it from nodes
while data.size > 1
  a=data.pop_front
  b=data.pop_front

  root = new node(a,b) <== create new node with a and b as children
  data.push_back(root) 

当您离开while循环时,root包含树的顶部。