[英]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.