【问题标题】:Searching a node of a binary tree in Prolog在 Prolog 中搜索二叉树的节点
【发布时间】:2014-01-24 23:51:27
【问题描述】:

Prolog 的初学者,使用二叉树几个小时。但作为 Prolog 世界的新手,对它的工作过程有点困惑。 我做了一些代码来形成一棵树并计算树的节点。当我测试时,程序输出就像..

?- constructTree(T),count_nodes(T,N).
T = tree(1, tree(2, tree(3, nil, nil), tree(4, nil, nil)), tree(5, tree(6, nil, nil), tree(7, nil, nil))),
N = 7.

其中T是对应的树,N代表树的节点号。

对应的代码是:

constructTree(tree(1,
            tree(2,
                tree(3,nil,nil),
                tree(4,nil,nil)),
            tree(5,
                tree(6,nil,nil),
                tree(7,nil,nil))
        )
    ).
count_nodes(nil,0).
count_nodes(tree(_,L,R),N):-
    count_nodes(L,CL),
    count_nodes(R,CR),
    N is CL+CR+1.

如何实现搜索节点技术,尤其是如果我想使用 DFS 搜索?考虑一下,我想使用 DFS 搜索找到节点 5,并计算迭代次数需要找到该节点。 解释和代码对理解这种新语言很有帮助..:)

【问题讨论】:

  • 你是自学的吗?你在用什么?
  • 到目前为止你尝试过什么?顺便说一句,您的示例数据是最小堆,而不是二叉搜索树。
  • 看我上面的代码,你能解释一下最小堆和二叉搜索树的区别吗..@DanielLyons

标签: prolog


【解决方案1】:

count_nodes/2 是如何实现的?这应该非常非常类似于搜索过程。只需添加搜索参数,当值匹配时停止访问(和计数)。

【讨论】:

  • 我在上面提到了我的代码,我会尝试你所说的。因为我是新手,所以我需要一些时间来习惯 Prolog..:)。我还有一个问题,如果你提到的是DFS搜索,那么BFS搜索的情况(程序)是什么?
  • BFS 只是交换递归调用 WRT DFS 的顺序。然而,这种简单的交换对效率有重大影响(从根本上说,它还交换时间/空间效率:)
猜你喜欢
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多