У меня есть совершенное двоичное дерево, в котором каждый узел представлен следующим образом:
[Value, LeftNode, RightNode]
Значение - это значение узла, а каждый LeftNode и RightNode - это сыновья узла, которые являются рекурсивными слишком двоичными деревьями. И последние узлы (листья) представлены так:
[Value, [], []]
пример:
L1=[4, [], []],
L2=[5, [], []],
L3=[6, [], []],
L4=[7, [], []],
L5=[2, L1, L2],
L6=[3, L3, L4],
Tree=[1,L5 , L6].
, поэтому у меня есть функция, которая возвращает последний левый лист
lastLeftLeaf([H, [], []]) ->H;
lastLeftLeaf([H, Left, Right]) ->lastLeftLeaf(Left).
в нашем примере это возвращает 4: значение L1. И функция, которая возвращает дерево без последнего левого листа: она заменяет этот лист на []
withoutLastLeftLeaf([H, [], []]) ->[] ;
withoutLastLeftLeaf([H, Left, Right]) ->[H, withoutLastLeftLeaf(Left), Right].
, в нашем примере она возвращает дерево без L1: которое заменено на []
оба функции выполняют одинаковый просмотр, и для получения результатов я должен сделать два просмотра, и для большей производительности и эффективности я хочу создать функцию с одним просмотром, который возвращает два результата: последний левый лист и дерево без этого листа, любая помощь и спасибо вы все.