从BST中提取子树 - Prolog

时间:2016-02-18 14:51:58

标签: prolog binary-search-tree subtree

假设你有一个二叉搜索树:

t (73, t (31, t(5,nil,nil), nil), t (101, t (83, nil, t(97,nil,nil)), t(200,nil,nil)))

是:

                73
             /     \
            31     101
           /      /   \
          5      83  200
                    /
                   97

我需要编写一个谓词子树(X1,X2,T),它会从树(X1和X2)中取2个值并查找它们的最小公共父项,并将其子树存储在T中。

所以对于上面的例子,如果我查询: 的子树(83200,X)。

我应该回来了:

t(101,t(83,nil,t(97,nil,nil)),t(200,nil,nil))

是:

                   101
                  /   \
                 83  200
                    /
                   97

由于101是我的两个数字的最小公共值,所以我得到了该子树。 我怎么能这样做?

谢谢!

1 个答案:

答案 0 :(得分:0)

一般步骤如下:

  1. 查找从根到第一个元素的路径
  2. 对第二个元素执行相同的操作
  3. 路径应该在开头共享一些元素。最后一个常见元素是子树的根。
  4. 从根中提取子树。
  5. 我希望这是足够的帮助。