【发布时间】:2016-08-28 01:46:39
【问题描述】:
应该是什么行为..?
- 由于我们要添加到非叶节点,所以它应该更新该节点并保留子节点。
或
- 更新非叶节点并丢弃子节点,因为我们正在添加而不是更新。
或
- 操作本身无效。
【问题讨论】:
-
二叉树有什么用?没有具体说明,这个问题没有多大意义
标签: algorithm tree binary-tree binary-search-tree
应该是什么行为..?
或
或
【问题讨论】:
标签: algorithm tree binary-tree binary-search-tree
这取决于树的插入逻辑。您将节点添加到树中,树确定它最终是叶节点还是中间节点。您已标记您的问题二叉树和二叉搜索树。这将是我将节点添加到二叉搜索树的代码。
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
当然,这棵树不适合重复。
【讨论】:
这取决于你的二叉树。
有两种主要形式。第一个是具有“左”和“右”子节点的规范二叉树。如果你指定一个节点应该有两个孩子或没有,你不能轻易插入额外的父母。您需要为刚刚创建的孙子创建一个虚拟兄弟姐妹。如果你放宽这个规则,你可以很容易地在节点和它的旧父节点之间插入一个新的父节点。
另一种形式是作为二叉树的二叉树。这有“子”和“下一个”指针。因此,在二进制形式中,它与规范树相同,但含义不同,您绘制的方式也不同。现在当然我们必须指定我们是插入一个额外的兄弟(下一个指针)还是一个额外的孩子(孩子指针)。但通常您指定您插入的节点本身不应有任何兄弟节点(下一个指针为空)。它当然也可以有一个 null 孩子。
【讨论】:
由于我们要添加到非叶节点,所以它应该更新该节点并保留子节点。
这实际上意味着替换不添加恕我直言。请注意,尽管使用 BT 做到这一点非常好;如果是 BST,它可能会引发 BST 本身的重组!
更新非叶节点并丢弃子节点,因为我们正在添加而不是更新。
我会说那会以添加的名义过度杀伤。 想一想当您将商品价格存储在树节点中的情况。如果您添加新商品的价格,是否会导致旧数据的破坏?也许没有!
操作本身无效。
这里的加法不能是无效的场景,因为没有先决条件保持二叉树原样。
所以,这里的加法效果应该是完全基于场景的。
【讨论】: