繁体   English   中英

Erlang 二叉树 function

[英]Erlang Binary Tree function

我有一个完美的二叉树,每个节点都是这样表示的

[Value, LeftNode, RightNode] 

Value 是节点值,每个 LeftNode 和 RightNode 都是 Node 的子节点,它们也是递归的二叉树。 最后的节点(叶子)是这样表示的

[Value, [], []]

例子:

L1=[4, [], []], 
L2=[5, [], []], 
L3=[6, [], []], 
L4=[7, [], []], 
L5=[2, L1, L2], 
L6=[3, L3, L4], 
Tree=[1,L5 , L6].

所以我有返回最后一个左叶的 function

lastLeftLeaf([H, [], []]) ->H;
lastLeftLeaf([H, Left, Right]) ->lastLeftLeaf(Left). 

在我们的示例中,它返回 4:L1 的值。 以及返回没有最后一个左叶的树的 function:它将这个叶替换为 []

withoutLastLeftLeaf([H, [], []]) ->[] ;
withoutLastLeftLeaf([H, Left, Right]) ->[H, withoutLastLeftLeaf(Left), Right].

在我们的示例中,它返回没有 L1 的树:替换为 []

这两个函数都进行相同的浏览并获得结果,我必须进行两次浏览,为了获得更高的性能和效率,我想创建一个 function,只需一次浏览即可返回两个结果:最后一个左叶和没有该叶的树任何帮助和谢谢你们。

您可以组合您编写的两个函数,并让新的 function 返回{Value, NewTree}形式的结果。 对于您已经在叶子的情况,这很简单:

take_last_left_leaf([H, [], []]) -> {H, []};

然后,在树中的任何其他点,您将递归到左分支,获取值和新的左分支,然后将值与修改后的树一起返回:

take_last_left_leaf([H, Left, Right]) ->
    {Value, NewLeft} = take_last_left_leaf(Left),
    {Value, [H, NewLeft, Right]}.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM