Tree 如何创建/实现镜像二叉树的算法

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的新手,尝试实现一个插入/添加函数来镜像现有的二叉树。感谢所有的想法


不知道从哪里开始。

我假设您想要在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