小编Raz*_*k J的帖子

如何平衡 Elixir 中的最大堆树?

我已经实现了最大堆树,但是当创建新节点时,树变得不平衡。例如,如果插入的大部分值都小于根值,则它成为左重树。这是因为 if-else 比较,但是还有其他方法来平衡树吗?提前致谢。

defmodule MaxHeap do

  defstruct value: nil, right: nil, left: nil

  def new(value), do: %MaxHeap{value: value}

  def insert(newValue=%MaxHeap{value: rootValue}, nextValue) do
    if nextValue <= rootValue do
      %MaxHeap{newValue | left: insert(newValue.left, nextValue)}
    else
      temp=rootValue #save old rootValue in temp, before editing it
      rootValue=nextValue
      nextValue=temp
      %MaxHeap{newValue | right: insert(newValue.right, nextValue), value: rootValue}
    end
  end

  def insert(nil, value) do
    %MaxHeap{value: value}
  end
end
Run Code Online (Sandbox Code Playgroud)

Elixir iex 中的输出树:

heap tree functional-programming elixir

1
推荐指数
1
解决办法
452
查看次数

标签 统计

elixir ×1

functional-programming ×1

heap ×1

tree ×1