You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二叉树邻接表转t(L,Root,R)递归格式的Prolog实现问题

邻接表二叉树转递归格式实现

功能需求

给定以邻接表格式(例如[1-8,1-2,…])存储的无特定顺序的二叉树数据,在已知根节点的前提下,将邻接表转换为t(L,Root,R)格式的递归结构,其中L、R为对应子树的递归结构或nil。

现有实现代码

% 邻接表格式二叉树转换为递归项格式
% 调用方法:make_tree(邻接表, 根节点, 输出树结构)
make_tree([],Root,t(nil,Root,nil)):-!.
make_tree([Root-X],Root,t(X,Root,nil)).
make_tree([Root-X],Root,t(nil,Root,X)):-!.
make_tree(_,nil,nil):-!.


make_tree(N,Root,t(L,Root,R)):-
    find_kids(N,Root,C,S),
    reorder(C,[C1,C2]),
    make_tree(S,C1,L), make_tree(S,C2,R).

% 调整两个子节点的排列顺序
reorder([X,Y],[Y,X]).
reorder([X,Y],[X,Y]).

% 查找根节点的子节点,并将对应边从邻接表中移除
find_kids(L,Root,[C1,C2],R):-
   find_children(L,Root,[C1,C2|_],R).

find_children([Root-Y|Xs],Root,[Y|T],Acc):-
   find_children(Xs,Root,T,Acc).

find_children([X-Y|Xs],Root,R,[X-Y|Acc]):-
   X \= Root,
   find_children(Xs,Root,R,Acc).

find_children([],_,[nil,nil],[]).

内容的提问来源于stack exchange,提问作者Benny Abramovici

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:45:03