从树的根目录中查找节点X的路径

时间:2014-02-17 21:09:53

标签: tree prolog nodes

我想请教您关于我想在Prolog中编码的程序的帮助。我想创建一个函数path(X,tree,Path),它从树的根中找到节点X的路径。基本上,我认为会有三个句子。

  1. path(X, void, []),返回空列表,因为没有树
  2. path(X,tree(X,void,void),[X]),返回包含树根元素的列表
  3. path(X,tree(Route,Left,Right),Path) ?????????
  4. 我相信有3个句子,我知道其中2个,但我不知道第三个是什么。谁能帮我?谢谢。

2 个答案:

答案 0 :(得分:1)

你的第3条)应该在返回路径前添加当前节点,并在分支上递归

path(X, tree(Route, Left, Right), [Route|Path]) :-
  path(X, Left, Path) ; path(X, Right, Path).

注意析取(;)/ 2。该规则将首先尝试左,并在回溯时尝试右分支。

答案 1 :(得分:-1)

您的规则仅适用于此情况:

? - path(3,tree(1,tree(2,void,void),tree(3,void,void)),X)。 X = [1,3]。 - 树中有三个节点。

但如果我尝试在树中添加更多节点,则无效。看下面的例子: ? - 路径(7,树(1,树(2,4,5),树(3,6,7)),X)。 假。 答案必须是X = [1,3,7]。