【问题标题】:Does every level order traversal uniquely define a BST?每个级别的订单遍历是否唯一地定义了一个 BST?
【发布时间】:2013-08-31 15:11:28
【问题描述】:

假设我必须比较两个二叉搜索树是否相似。现在,基本方法是递归公式,检查根是否相等,然后继续检查相应的左右子树是否相等。

但是,如果二叉搜索树具有相同的级别顺序遍历,那么它们是否相同是正确的吗?换句话说,每个 BST 是否都有唯一的级别顺序遍历?

【问题讨论】:

    标签: algorithm tree binary-tree binary-search-tree


    【解决方案1】:

    不,不是。

    第一个:

    1
     \
      \
       2
        \
         \
          3
    

    第二个:

       1
      / \
     /   \
    2     3
    

    这两个等级的顺序是 1 - 2 - 3。

    由于表示具有 n 个节点的二叉树的信息论下限是2n - THETA(log n),我认为任何简单的遍历都不应该能够识别二叉树。

    谷歌搜索确认下限:

    lower bound bits binary tree

    从 BST 到二叉树有一个简单的简化。考虑节点值为 1..n 的 BST。这些 BST 的数量是具有 n 个节点的二叉树的数量(您始终可以进行前序遍历并按该顺序插入值)。如果您可以使用级别顺序遍历来识别这样的 BST,您可以使用 1 表示“层内”节点,使用 0 表示“端层”节点。第一棵树变成“000”,第二棵树变成“010”。这将使 BST 仅用 n 位来识别,不符合信息论下限。

    【讨论】:

    • 如果我们谈论二叉搜索树会怎样?你给出的答案是二叉树。
    • @NikunjBanka 一个简单的归约就可以了。已编辑。
    • 你能举一个例子,两个不同的 BST 有相同的中序遍历吗?
    • 我同样想不出任何具有相同级别顺序的 BST 示例。你确定你的减少是正确的吗?
    【解决方案2】:

    嗯,我和我的一个朋友讨论过这个问题,所以答案不完全是我的! ,但是这就是出现的情况,可以对您为 BST 执行的级别顺序遍历进行排序,因此您可以获得特定 BST 的中序遍历。现在你得到了两个遍历,然后可以用来唯一地标识 BST。因此,说每个 BST 都有一个唯一的级别顺序遍历是不正确的。

    算法:

    ConstructBST(levelorder[] , int Size)
       1. Declare array A of size n.
       2. Copy levelorder into A
       3. Sort A
       From two traversals A and levelorder of a Binary Search Tree , of which one is inorder, construct the tree.
    

    【讨论】:

    • 你说“你为一个BST做的水平顺序遍历是可以排序的”是什么意思?只有当 BST 中的所有节点都没有左指针时,BST 的层序遍历才会产生排序结果。您所指出的仅适用于我刚才提到的特殊情况。我认为我们不能仅仅根据一种特殊情况就得出结论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多