【问题标题】:Find position of a node in In-order traversal of complete binary tree in less than O(n)在小于 O(n) 的完全二叉树的中序遍历中找到节点的位置
【发布时间】:2022-11-18 02:15:38
【问题描述】:

问题:给定一个节点n的完全二叉树。你有三种类型的信息,

  1. 以node为根的子树的节点数n
  2. 节点的父节点n
  3. 节点的直接子节点n

    寻找n在完全二叉树中的位置,如果遍历为了.

    例子:

           0
         /   \
        1     2
       / \   / \
      3   4 5   6
    

    对于给定的树,如果考虑基于 1 的索引,节点 2 的位置为 6。 6的位置是7。

    是否有可能在低于线性时间复杂度的情况下找到答案?

【问题讨论】:

  • 我假设你有这些信息每一个节点,而不仅仅是一个给定的节点(这似乎使问题无法解决)。节点在其子树中的位置很简单:它是其左子树的大小加一。然后你需要走到根,更新位置:如果你来自左子树,保持当前位置,否则加上左子树大小加一。运行时间为 O(节点深度),平均为 O(log(树的大小))。

标签: algorithm binary-tree graph-theory


【解决方案1】:

按位运算实际上是常数时间!首先将n 更改为n+1。然后去掉最高位,乘以2,加1。最后乘以2^h,其中h=log(x)x就是信息1。(子树的节点数)。这一切都可以使用按位运算高效地完成。

示例:2 -> 3 -> 3 -> 66 -> 7 -> 7 -> 73 -> 4 -> 1 -> 1(您必须保持前导零)

我现在没有时间,但稍后会发布解释:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多