【问题标题】:What if I add new node at non leaf node in binary tree?如果我在二叉树的非叶子节点添加新节点怎么办?
【发布时间】:2016-08-28 01:46:39
【问题描述】:

应该是什么行为..?

  1. 由于我们要添加到非叶节点,所以它应该更新该节点并保留子节点。

  1. 更新非叶节点并丢弃子节点,因为我们正在添加而不是更新。

  1. 操作本身无效。

【问题讨论】:

  • 二叉树有什么用?没有具体说明,这个问题没有多大意义

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


【解决方案1】:

这取决于树的插入逻辑。您将节点添加到树中,树确定它最终是叶节点还是中间节点。您已标记您的问题二叉树和二叉搜索树。这将是我将节点添加到二叉搜索树的代码。

def add(self, root, item):
  if root is None:
    return
  if item < root.data:
    root.left = add(self, root.left, item)
  else:
    root.right = add(self, root.right, item)
 return root

当然,这棵树不适合重复。

【讨论】:

    【解决方案2】:

    这取决于你的二叉树。

    有两种主要形式。第一个是具有“左”和“右”子节点的规范二叉树。如果你指定一个节点应该有两个孩子或没有,你不能轻易插入额外的父母。您需要为刚刚创建的孙子创建一个虚拟兄弟姐妹。如果你放宽这个规则,你可以很容易地在节点和它的旧父节点之间插入一个新的父节点。

    另一种形式是作为二叉树的二叉树。这有“子”和“下一个”指针。因此,在二进制形式中,它与规范树相同,但含义不同,您绘制的方式也不同。现在当然我们必须指定我们是插入一个额外的兄弟(下一个指针)还是一个额外的孩子(孩子指针)。但通常您指定您插入的节点本身不应有任何兄弟节点(下一个指针为空)。它当然也可以有一个 null 孩子。

    【讨论】:

      【解决方案3】:

      由于我们要添加到非叶节点,所以它应该更新该节点并保留子节点。

      这实际上意味着替换不添加恕我直言。请注意,尽管使用 BT 做到这一点非常好;如果是 BST,它可能会引发 BST 本身的重组!

      更新非叶节点并丢弃子节点,因为我们正在添加而不是更新。

      我会说那会以添加的名义过度杀伤。 想一想当您将商品价格存储在树节点中的情况。如果您添加新商品的价格,是否会导致旧数据的破坏?也许没有!

      操作本身无效。

      这里的加法不能是无效的场景,因为没有先决条件保持二叉树原样。

      所以,这里的加法效果应该是完全基于场景的。

      【讨论】:

        猜你喜欢
        • 2016-04-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
        相关资源
        最近更新 更多