在Prolog中找到树的根

时间:2014-01-01 08:53:08

标签: prolog

我编写了一个构建二叉树的代码,它构建如下:

[[[[discrete,68]],[linear,78],[[[[calculas1,78]],[physics1,80],[]],[physics2,90],[]]]]

但是我面临的问题是,当我想在树上搜索时,我找不到树的标题!

1 个答案:

答案 0 :(得分:1)

缩进数据,更改一些括号以区分数据条目与其余条目,

[ [ [ (discrete,68) ],
    (linear,78),
    [ [ [ (calculas1,78) ],
        (physics1,80),
        [] ],
      (physics2,90),
      []]]]

看起来它满足

tree_list( [X] ):- tree(X).

tree( [] ).         % an empty tree
tree( [ (Key, Value) ] ).     % a leaf
tree( [ L, (Key, Value), R] ):-      % a branch
    tree(L), tree(R).

因此,您的数据列表不是树,它是一个树的列表,即

                (linear,78)
               /            \
    (discrete,68)           (physics2,90)
                           /             \
                     (physics1,80)       EMPTY
                    /             \
               (calculas1,78)     EMPTY

树根的含义可能是

root( Tree, Root):- Tree=[Root], tree(Tree).       % a leaf
root( Tree, Root):- Tree=[Left, Root, Right], tree(Tree).   % a branch

对于您的数据,您可以通过

获取
get_root(Data,Root):- Data=[Tree], root(Tree, Root).