我已经实现了最大堆树,但是当创建新节点时,树变得不平衡。例如,如果插入的大部分值都小于根值,则它成为左重树。这是因为 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)