【发布时间】:2019-03-04 22:46:59
【问题描述】:
我已经实现了最大堆树,但是在创建新节点时,树变得不平衡。例如,如果插入的大多数值都小于根值,则它成为左重树。这是因为 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
【问题讨论】:
标签: functional-programming tree elixir heap balance