Tree 如何创建/实现镜像二叉树的算法
我是Elixir的新手,尝试实现一个插入/添加函数来镜像现有的二叉树。感谢所有的想法Tree 如何创建/实现镜像二叉树的算法,tree,binary,elixir,add,Tree,Binary,Elixir,Add,我是Elixir的新手,尝试实现一个插入/添加函数来镜像现有的二叉树。感谢所有的想法 不知道从哪里开始。我假设您想要在Elixir中实现一个二叉树,并且您也熟悉二叉树。为此,您需要使用struct(它只是幕后的一个映射) 现在,我们在树中插入5: iex(2)> node = TreeNode.insert(node, 5) %TreeNode{ left: %TreeNode{left: nil, right: nil, value: 5}, right: nil, valu
不知道从哪里开始。我假设您想要在Elixir中实现一个二叉树,并且您也熟悉二叉树。为此,您需要使用struct(它只是幕后的一个映射) 现在,我们在树中插入5:
iex(2)> node = TreeNode.insert(node, 5)
%TreeNode{
left: %TreeNode{left: nil, right: nil, value: 5},
right: nil,
value: 10
}
和12:
iex(3)> node = TreeNode.insert(node, 12)
%TreeNode{
left: %TreeNode{left: nil, right: nil, value: 5},
right: %TreeNode{left: nil, right: nil, value: 12},
value: 10
}
和11:
iex(4)> node = TreeNode.insert(node, 11)
%TreeNode{
left: %TreeNode{left: nil, right: nil, value: 5},
right: %TreeNode{
left: %TreeNode{left: nil, right: nil, value: 11},
right: nil,
value: 12
},
value: 10
}
树的最终形状如下所示:
10
/ \
5 12
/
11
10
/ \
12 5
\
11
镜像现在变得非常简单。以下是实现镜像功能的模块:
defmodule TreeMirror do
def mirror(nil), do: nil
def mirror(node) do
%TreeNode{value: node.value, left: mirror(node.right), right: mirror(node.left)}
end
end
要镜像前面创建的节点,只需调用treemirro.mirror
:
iex(5)> mirrored = TreeMirror.mirror node
%TreeNode{
left: %TreeNode{
left: nil,
right: %TreeNode{left: nil, right: nil, value: 11},
value: 12
},
right: %TreeNode{left: nil, right: nil, value: 5},
value: 10
}
现在,镜像的
的形状如下所示:
10
/ \
5 12
/
11
10
/ \
12 5
\
11
感谢您的出色工作,解释得很好,谢谢。但是我有一个问题:你能给我解释一下,这个函数是如何以及何时调用的吗?def insert(nil,value)do%TreeNode{value:value}end@RazakJ在代码示例中,我在树中插入了5、12和11。我试图创建一个“最大堆”。我尝试交换右侧节点以使根作为最大值,但代码仅在值小于根时在左侧添加节点,如果值大于根,则仅在右侧添加节点,并交换它们。如何平衡它?代码部分:def insert(newValue=%MaxHeap{value:rootValue},nextValue)do if nextValue